For developers
Customize it in your own plugin, never in ours
Custom tools, connectors and prompt rules live in a separate site plugin that uses a documented extension API. Updating Agent Front Desk never breaks them.
The rule
Customizations never edit our plugins
- Plugin folders are replaced on update, so edits to them would be lost. A site plugin is not touched.
- The API has a major version, AFD_Hooks::API_VERSION, currently 1. Check it from your plugin.
- Within a major version we only add. Hooks keep their names, argument order and return types. Interfaces gain no new required methods.
- A renamed hook keeps working for at least one minor release, with a WordPress deprecation notice in WP_DEBUG.
- A set of contract tests locks the API. If one fails, a breaking change slipped in.
What you can extend
Actions
afd_loaded, afd_register_tools, afd_lead_saved, afd_handover_requested, afd_handover_claimed, afd_booking_confirmed, afd_settings_saved and more. React to what happens.
Filters
afd_system_prompt, afd_tool_result, afd_show_widget, afd_post_text, afd_widget_config, afd_model_prices and more. Change behaviour without editing our code.
Tool registry
AFD_Tools::register() adds a tool the assistant can call, with a schema, in chat and voice. Arguments are validated before your callback runs.
CRM connector
Implement AFD_CRM_Connector to sync leads, bookings and summaries to any CRM, with queued retries and a sync log.
Calendar connector
Implement AFD_Calendar_Connector for real free and busy and event creation: Google, Outlook, Cal.com or your own system.
Notification channel
Implement AFD_Notification_Channel to send staff alerts to Slack, Teams or SMS.
Knowledge source
Implement AFD_Knowledge_Source to feed documents from anywhere. They sync hourly and on re-index.
Admin pages
Register a React page inside the Front Desk admin with window.AFD.registerPage().
Example
add_filter( 'afd_system_prompt', fn( $p, $mode ) =>
$p . "\nNever discuss our competitor Acme.", 10, 2 );
add_filter( 'afd_show_widget', fn( $show ) =>
$show && ! is_page( 'checkout' ) );Starter plugin
A working skeleton for each extension point
The starter plugin shows every extension point once, so a new client plugin starts from something that runs.
- A custom tool, with a prompt rule that makes the assistant use it
- Skeletons for a CRM connector, a calendar connector and a notification channel
- An admin panel inside the Front Desk app with its own settings and REST route
- bin/new-connector.sh acme creates a renamed copy for a client in one command
- Tested: the assistant used the custom tool, and the plugin survived deactivating and reactivating core and a database migration
The developer documentation, extension reference and starter plugin ship with the suite. Ask us for access during the private beta.
Developer questions
Can you connect it to our own systems?
Yes. Custom connectors, such as a CRM, a calendar or an internal system, are built as a small site plugin on our documented extension API. Because they live in your plugin and not ours, updates never break them.
How do updates work?
The plugins are GPL and every feature works without a license, forever. An optional license key adds automatic updates and support, delivered to your site like any plugin update. Without one, you update by uploading a new zip. Terms are by arrangement during the beta.
Need a custom connector?
Tell us the CRM, calendar or system. We build it as a small plugin on this API.