frappe-agent-interpreter

$npx mdskill add Impertio-Studio/Frappe_Claude_Skill_Package/frappe-agent-interpreter

Clarify vague ERPNext requests into concrete technical specifications.

  • Converts ambiguous business needs into actionable implementation plans.
  • Maps requirements to the full 61-skill catalog for Frappe.
  • Identifies when to use this agent versus direct skill execution.
  • Outputs clear technical specs ready for code generation.

SKILL.md

.github/skills/frappe-agent-interpreterView on GitHub ↗
---
name: frappe-agent-interpreter
description: >
  Use when receiving vague or unclear ERPNext/Frappe development requests
  that need interpretation. Transforms requirements like 'make invoice
  auto-calculate' or 'add approval workflow' into concrete technical
  specifications. Determines which Frappe mechanisms to use and maps to
  the full 61-skill catalog. Keywords: vague requirement, clarify scope,
  translate business need, technical spec, implementation plan,
  what does this mean, unclear requirement, translate to code, how to build this.
license: MIT
compatibility: "Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16."
metadata:
  author: OpenAEC-Foundation
  version: "2.0"
---

# Frappe Code Interpreter Agent

Transforms vague or incomplete Frappe/ERPNext development requests into clear, actionable technical specifications mapped to the full 61-skill catalog.

**Purpose**: Bridge the gap between "what the user wants" and "what needs to be built"

## When to Use This Agent

```
USER REQUEST ANALYSIS
|
+-- Request is vague/incomplete
|   "Make the invoice do something when submitted"
|   --> USE THIS AGENT
|
+-- Request lacks technical specifics
|   "Add approval before order confirmation"
|   --> USE THIS AGENT
|
+-- Multiple implementation paths possible
|   "Automate inventory updates"
|   --> USE THIS AGENT
|
+-- Request has clear technical specs already
|   "Create Server Script on validate for Sales Invoice"
|   --> Skip agent, use relevant frappe-* skills directly
```

## Interpretation Workflow

```
STEP 1: EXTRACT INTENT
  - What is the business problem?
  - What should happen? When? To what data?
  - Who should be affected (roles/users)?

STEP 2: IDENTIFY TRIGGER CONTEXT
  - Document lifecycle event? (save/submit/cancel)
  - User action? (button click, field change)
  - Time-based? (daily, hourly, cron)
  - External event? (webhook, API call)

STEP 3: DETERMINE MECHANISM
  - Client Script, Server Script, or Controller?
  - Hooks configuration needed?
  - Custom app required?
  - v16 extend_doctype_class applicable?

STEP 4: GENERATE SPECIFICATION
  - DocType(s), event/trigger, mechanism, data flow
  - Error handling requirements
  - Version compatibility (v14/v15/v16)

STEP 5: MAP TO SKILLS
  - List required frappe-* skills from full catalog
  - Note dependencies between skills
```

See [references/workflow.md](references/workflow.md) for detailed steps.

## Mechanism Selection Matrix

| Requirement Pattern | Mechanism | Custom App? |
|---------------------|-----------|:-----------:|
| "Auto-calculate on form" | Client Script + Server Script | No |
| "Validate before save" | Server Script (validate) | No |
| "Send notification after submit" | Server Script (on_submit) | No |
| "Add button to form" | Client Script | No |
| "Scheduled report/sync" | hooks.py scheduler_events | Yes |
| "Filter list per user" | Server Script (Permission Query) | No |
| "Custom REST API" | Server Script (API) or @frappe.whitelist() | Depends |
| "Complex transaction with rollback" | Controller | Yes |
| "External library needed (requests)" | Controller | Yes |
| "Approval workflow" | Built-in Workflow + optional Server Script | No |
| "Print format customization" | Jinja template (Print Format) | No |
| "Custom report" | Script Report or Query Report | Depends |
| "Background processing" | frappe.enqueue() | Yes |
| "File upload handling" | Controller + File hooks | Yes |
| "Cache invalidation" | Cache API + hooks | Yes |
| "Website/portal page" | Web template + routing | Yes |
| "UI component (dashboard, etc.)" | Page or Custom Page | Yes |

## Clarifying Questions Framework

### 1. WHAT Questions
- What DocType(s) are involved?
- What data needs to change?
- What should the outcome be?

### 2. WHEN Questions
- On form load? On field change? Before/after save?
- Before/after submit? On a schedule? Button click?

### 3. WHO Questions
- All users? Specific roles? Document owner only?

### 4. WHERE Questions
- In the form (UI)? Database only? Report? External system?

### 5. ERROR Questions
- Block the operation? Show warning? Log silently?

### 6. VERSION Questions (v16 considerations)
- Target single version or multi-version compatibility?
- Can we use `extend_doctype_class` (v16) or need `doc_events` (v14+)?
- Type annotations desired? (v16 best practice)

## Output Specification Template

ALWAYS generate specifications in this format:

```markdown
## Technical Specification

### Summary
[One sentence describing what will be built]

### Business Requirement
[Original user request, clarified]

### Implementation

| Aspect | Value |
|--------|-------|
| **DocType(s)** | [List] |
| **Trigger** | [Event/action] |
| **Mechanism** | [Client Script / Server Script / Controller / etc.] |
| **Version** | [v14 / v15 / v16 / all] |

### Data Flow
1. [Step 1]
2. [Step 2]

### Error Handling
[Strategy]

### Required Skills
- [ ] frappe-skill-name - for [purpose]

### Validation Criteria
[How to verify it works]
```

## Complete Skill Catalog (61 skills)

### Syntax Layer (11 skills)
| Skill | Use For |
|-------|---------|
| `frappe-syntax-clientscripts` | Client Script JS syntax |
| `frappe-syntax-serverscripts` | Server Script Python sandbox syntax |
| `frappe-syntax-controllers` | Controller class syntax |
| `frappe-syntax-hooks` | hooks.py configuration syntax |
| `frappe-syntax-hooks-events` | Document event hook syntax |
| `frappe-syntax-whitelisted` | @frappe.whitelist() syntax |
| `frappe-syntax-jinja` | Jinja template syntax |
| `frappe-syntax-scheduler` | Scheduler/enqueue syntax |
| `frappe-syntax-customapp` | App structure syntax |
| `frappe-syntax-doctypes` | DocType JSON definition syntax |
| `frappe-syntax-reports` | Report definition syntax |

### Core Layer (7 skills)
| Skill | Use For |
|-------|---------|
| `frappe-core-database` | Database operations, ORM, raw SQL |
| `frappe-core-permissions` | Permission system, roles, rules |
| `frappe-core-api` | REST API, resource API |
| `frappe-core-workflow` | Workflow engine, states, transitions |
| `frappe-core-notifications` | Email, push, system notifications |
| `frappe-core-files` | File upload, attachment, storage |
| `frappe-core-cache` | Redis cache, cache invalidation |

### Implementation Layer (12 skills)
| Skill | Use For |
|-------|---------|
| `frappe-impl-clientscripts` | Client Script implementation patterns |
| `frappe-impl-serverscripts` | Server Script implementation patterns |
| `frappe-impl-controllers` | Controller implementation patterns |
| `frappe-impl-hooks` | Hook implementation patterns |
| `frappe-impl-whitelisted` | Whitelisted method patterns |
| `frappe-impl-jinja` | Jinja template patterns |
| `frappe-impl-scheduler` | Scheduled task/background job patterns |
| `frappe-impl-customapp` | Custom app development workflow |
| `frappe-impl-reports` | Report building patterns |
| `frappe-impl-workflow` | Workflow implementation patterns |
| `frappe-impl-website` | Website/portal development |
| `frappe-impl-ui-components` | UI component patterns |
| `frappe-impl-integrations` | External system integration |

### Error Layer (7 skills)
| Skill | Use For |
|-------|---------|
| `frappe-errors-clientscripts` | Client Script error patterns |
| `frappe-errors-serverscripts` | Server Script error patterns |
| `frappe-errors-controllers` | Controller error patterns |
| `frappe-errors-hooks` | Hook error patterns |
| `frappe-errors-api` | API error patterns |
| `frappe-errors-permissions` | Permission error patterns |
| `frappe-errors-database` | Database error patterns |

### Ops Layer (8 skills)
| Skill | Use For |
|-------|---------|
| `frappe-ops-bench` | Bench CLI commands |
| `frappe-ops-deployment` | Production deployment |
| `frappe-ops-backup` | Backup and restore |
| `frappe-ops-performance` | Performance tuning |
| `frappe-ops-upgrades` | Version upgrade procedures |
| `frappe-ops-cloud` | Cloud hosting (FC, AWS, etc.) |
| `frappe-ops-app-lifecycle` | App versioning and releases |
| `frappe-ops-frontend-build` | Frontend asset building |

### Testing Layer (2 skills)
| Skill | Use For |
|-------|---------|
| `frappe-testing-unit` | Unit and integration tests |
| `frappe-testing-cicd` | CI/CD pipeline setup |

### Agent Layer (5 skills)
| Skill | Use For |
|-------|---------|
| `frappe-agent-interpreter` | THIS SKILL - requirement interpretation |
| `frappe-agent-validator` | Code validation before deployment |
| `frappe-agent-debugger` | Debugging Frappe issues |
| `frappe-agent-migrator` | Data migration planning |
| `frappe-agent-architect` | Architecture decision-making |

## Skill Dependencies Map

| Mechanism | Required Skills |
|-----------|----------------|
| Client Script | `frappe-syntax-clientscripts`, `frappe-impl-clientscripts`, `frappe-errors-clientscripts` |
| Server Script (Doc Event) | `frappe-syntax-serverscripts`, `frappe-impl-serverscripts`, `frappe-errors-serverscripts` |
| Server Script (API) | `frappe-syntax-serverscripts`, `frappe-core-api`, `frappe-errors-api` |
| Server Script (Scheduler) | `frappe-syntax-serverscripts`, `frappe-syntax-scheduler`, `frappe-impl-scheduler` |
| Server Script (Permission) | `frappe-syntax-serverscripts`, `frappe-core-permissions`, `frappe-errors-permissions` |
| Controller | `frappe-syntax-controllers`, `frappe-impl-controllers`, `frappe-errors-controllers` |
| Hooks | `frappe-syntax-hooks`, `frappe-impl-hooks`, `frappe-errors-hooks` |
| Custom App | `frappe-syntax-customapp`, `frappe-impl-customapp`, `frappe-ops-bench` |
| Jinja Template | `frappe-syntax-jinja`, `frappe-impl-jinja` |
| Database Operations | `frappe-core-database`, `frappe-errors-database` |
| Whitelisted Method | `frappe-syntax-whitelisted`, `frappe-impl-whitelisted` |
| Workflow | `frappe-core-workflow`, `frappe-impl-workflow` |
| Reports | `frappe-syntax-reports`, `frappe-impl-reports` |
| Website/Portal | `frappe-impl-website`, `frappe-syntax-jinja` |
| Integration | `frappe-impl-integrations`, `frappe-impl-customapp` |
| Background Jobs | `frappe-impl-scheduler`, `frappe-syntax-scheduler` |
| Testing | `frappe-testing-unit`, `frappe-testing-cicd` |
| Deployment | `frappe-ops-deployment`, `frappe-ops-bench` |

## Common Pattern Recognition

| User Phrase | Mechanism | Key Skills |
|-------------|-----------|------------|
| "auto-calculate", "automatically fill" | Client Script + Server Script | `frappe-impl-clientscripts`, `frappe-impl-serverscripts` |
| "validate", "check before save" | Server Script (validate) | `frappe-impl-serverscripts` |
| "prevent", "block", "don't allow" | Server Script + frappe.throw() | `frappe-errors-serverscripts` |
| "send email", "notify" | Server Script or Notification | `frappe-core-notifications` |
| "sync", "integrate", "API" | Controller (custom app) | `frappe-impl-integrations` |
| "every day", "schedule" | Scheduler or hooks.py | `frappe-impl-scheduler` |
| "only see their own" | Permission Query | `frappe-core-permissions` |
| "approval", "authorize" | Built-in Workflow | `frappe-core-workflow`, `frappe-impl-workflow` |
| "add button", "custom action" | Client Script | `frappe-impl-clientscripts` |
| "print format", "PDF" | Jinja Template | `frappe-impl-jinja` |
| "report", "dashboard" | Script/Query Report | `frappe-impl-reports` |
| "deploy", "go live" | Deployment workflow | `frappe-ops-deployment` |
| "test", "CI" | Testing framework | `frappe-testing-unit` |
| "cache", "performance" | Cache + optimization | `frappe-core-cache`, `frappe-ops-performance` |

## Version Awareness

ALWAYS consider version compatibility:

| Feature | v14 | v15 | v16 |
|---------|:---:|:---:|:---:|
| Server Script sandbox | Yes | Yes | Yes |
| `extend_doctype_class` | No | No | Yes |
| Chrome PDF rendering | No | No | Yes |
| Data masking | No | No | Yes |
| UUID naming rule | No | No | Yes |
| Type annotations (best practice) | No | No | Yes |
| Scheduler tick (seconds) | 240 | 60 | 60 |
| `job_id` dedup | No | Yes | Yes |

## Agent Output Checklist

Before completing interpretation, ALWAYS verify:

- [ ] Business requirement is clear and unambiguous
- [ ] Trigger/event is identified
- [ ] Mechanism is selected with justification
- [ ] DocType(s) are specified
- [ ] Data flow is documented
- [ ] Error handling approach is defined
- [ ] Version compatibility is noted (v14/v15/v16)
- [ ] Required frappe-* skills are listed from full catalog
- [ ] Validation criteria are defined
- [ ] v16 considerations noted (extend_doctype_class, type annotations)

See [references/checklists.md](references/checklists.md) for detailed checklists.
See [references/examples.md](references/examples.md) for interpretation examples.

More from Impertio-Studio/Frappe_Claude_Skill_Package