Changelog
A summary of public releases of Frappe Assistant Core. For granular release notes, see change_log/v2/ in the repository.
3.0.0-beta — current
Internal-track release. Prepares the codebase for the next major version.
2.4.3
Security
- SSTI hardening in prompt templates —
preview_templateand storedPrompt Templatecontent now render throughjinja2.sandbox.SandboxedEnvironment, blocking__class__/__mro__/__subclasses__attribute walks Prompt Categoryread restricted to theAssistant Userrole
Fixes
update_documentsupportsallow_on_submitfields on submitted docs (#179)update_documentaccepts date strings in child rows (#168)create_documentwarns on silent field overrides triggered by controllervalidate()(#181)- OCR:
tesseractreinstated as a backend option alongside PaddleOCR and Ollama chardetconstraint loosened for Frappe 15.107+ (#176)
Improvements
- Removed dead wildcard
doc_eventsthat fired on every save across the bench
2.4.2
Fixes
update_documentnow properly handles child tables (#168) with auto-detected patch vs replace modeupdate_documentrejects direct child-doctype calls and returns a clear retry suggestioncreate_documentno longer reports false-positive missing fields (#165) populated by controllerset_missing_values()create_documentfixedUnboundLocalErrorin theMandatoryErrorhandler- Audit log no longer redacts legitimate token-count metrics
chatgpt_fetchsignature aligned withfilter_sensitive_fields— restored from a crash on every callupdate_tool_role_accessaccepts JSON-string roles from the admin UI- HRMS Skill schema mismatch on
bench migrateis now safely no-op across HRMS schemas
Improvements
- Conventional-commit linting and pip-audit are available as local pre-commit hooks
2.4.1
Fixes
- HRMS Skill link corruption (#153) — removed the v2.4.0 rename migration that incorrectly renamed HRMS's own
SkillDocType toFAC Skill. A repair patch heals affected sites automatically on upgrade.
2.4.0
New — Skills & Agent Orchestration
- FAC Skills subsystem — new
FAC SkillDocType lets administrators author and publish reusable LLM skills (markdown + frontmatter). Admin page now has Skills and Prompts tabs. External Frappe apps can register their own skills via a new hook API. - Tool response image support — tool results can include image data alongside text
get_pending_approvalstool — agents can discover workflow actions waiting on the current user
Improvements
- Sandbox isolation for
run_python_code— user code runs in a disposable subprocess so RLIMIT and SIGALRM only affect the child process, never the Frappe worker - Leaner sandbox — matplotlib / seaborn / plotly / scipy removed from pre-loaded libraries (they consumed 200–400 MB and never returned plots).
max_recursion_depthdefault raised from 100 to 500. - Audit log accuracy fixes and richer captured payload
- Signal-based timeouts skip cleanly when running inside a worker thread
Security
- Fixed (#132) SQL injection in the removed
create_visualizationtool — tool deleted - Fixed (#133) unprotected whitelist decorators on duplicate config endpoints
- Fixed (#134)
extract_file_contentnow enforces parent-document permission check - Fixed (#140) usage statistics restricted to assistant admins
Community
- GitHub Sponsors enabled
- Professional services available via Promantia
2.3.4
Fixes
- OAuth auth isolation — fixed a critical bug where OAuth token requests permanently monkey-patched
frappe.get_request_header, causing all subsequent API key authentication on the same Gunicorn worker to fail with 403
2.3.3
Fixes
- PaddleOCR dependencies made optional — install with
pip install frappe-assistant-core[ocr]. Without the extra, users get a clear message guiding them to install or switch to Ollama vision.
Improvements
- CI now tests on Frappe v15 (Python 3.12) and v16 (Python 3.14)
- Automated releases via semantic-release
- Conventional-commit enforcement via commitlint
2.3.2
New — OCR & Document Extraction
- PaddleOCR integration for image and scanned-PDF extraction with multi-language support
- Ollama-based vision model support as an alternative OCR backend (e.g.
deepseek-ocr) - Configurable OCR backend, language, timeout, and memory limits in Assistant Core Settings
Improvements
- Audit log retention policy (default 180 days)
- Better report-tool feedback with actionable guidance on misuse
- OAuth localhost support — native apps can register HTTP localhost redirect URIs without errors
- MCP 2025-06-18 spec
- Code execution limits (timeout, memory, CPU) configurable
- Settings defaults correctly applied on fresh installs and upgrades
Security
- Fixed unauthorized access to protected API endpoints
- Fixed sensitive credential values appearing in server logs
- Removed unused API endpoints
2.3.1
Database-Backed Plugin & Tool Management
FAC Plugin ConfigurationDocType — atomic plugin enable/disable with audit trailFAC Tool ConfigurationDocType — per-tool enable/disable, category assignment, and role-based access- Automatic tool category detection via AST parsing
- Frappe v16 compatibility alongside v15
- Database locks replace file-based plugin state management
2.3.0
MCP Prompt Templates
- Prompt Templates system — reusable, parameterized prompts that users can customize and execute via AI clients
- MCP prompts protocol support (
prompts/list,prompts/get) - Template rendering with Jinja2, Format String, and Raw engines
- Access control: Private, Shared, or Public visibility with role-based sharing
- 7 built-in templates (Sales, Manufacturing, HR, CRM, Procurement, Documentation, Data Quality)
- Dark theme for FAC Admin and Assistant Core Settings
- OAuth timezone fix — tokens no longer expire prematurely in non-UTC timezones
2.2.2
OAuth Enhancements
- OAuth client registration returns complete RFC 7591 metadata
- Repository migrated to
buildswithpaul/Frappe_Assistant_Core - Claude Desktop UI setup documented
- ChatGPT integration documented
2.2.1
Multi-Tool Orchestration & Report Polling
- Multi-tool orchestration for
run_python_code— calltools.get_documents()/tools.generate_report()inside the Python sandbox for 80–95% token savings - Prepared-report polling with exponential backoff
- Dual authentication — OAuth Bearer tokens and API key/secret for STDIO clients
- Plugin state fix — custom tools now properly respect disabled plugin state
frappe._dict→ plain dict conversion for pandas DataFrame compatibility
2.2.0
StreamableHTTP Transport & OAuth 2.0
- Migrated from STDIO bridge to StreamableHTTP transport
- OAuth 2.0 authentication with Dynamic Client Registration (RFC 7591), PKCE, and automatic token refresh
- Custom MCP server optimized for Frappe — handles datetime, Decimal, and
frappe._dictserialization natively - OAuth discovery endpoints —
/.well-known/openid-configuration, Protected Resource Metadata (RFC 9728) - Frappe v15/v16 compatibility with automatic version detection for OAuth settings
- FAC Admin page with MCP endpoint URL display and plugin management
If you are still on the legacy STDIO bridge, see Migration from STDIO.
2.0.1
Bug Fixes & Improvements
- Document creation overhauled — proper child-table handling, required-field validation; success rate improved from ~60% to ~95%
- Dashboard chart system rebuilt — fixed field mapping, filter format conversion, and smart field auto-detection (reliability ~40% → ~98%)
- Custom tool discovery fixed for external Frappe apps through the hooks system
- Validation framework added with pre-creation checks and
validate_onlymode - Better error messages with specific guidance and recovery suggestions
2.0.0
Architecture Overhaul
- Plugin-based architecture with auto-discovery — tools organized into Core, Data Science, Visualization, and Custom Tools
- 21 comprehensive tools across document operations, search, metadata, reports, workflows, analytics, and visualization
- Plugin Manager with runtime enable/disable through the web interface
BaseToolframework for standardized tool development- Multi-layer security framework with role-based access control, document-level permissions, and field-level data protection
- Comprehensive audit trail for all tool operations
- License change: MIT → AGPL-3.0 (forever free for open-source and personal use; see COMMERCIAL.md for commercial licensing)
- Modern Python packaging with
pyproject.toml