Early access · Dynamics 365 Finance & Operations

Your AI D365FO developer helper.

FO-Fox takes a task, makes the change in your Azure DevOps codebase, runs the build and tests, then shows you the diff. Nothing is pushed until you say so.

Works with your existing Azure DevOps repos and Entra ID sign-in.

Add custom fields to SalesTablefeature/sales-custom-fields
Add two custom fields to SalesTable in the Contoso Retail workspace: ContosoDeliveryPriority (enum, default Standard) and ContosoStoreId. Show them on the sales order header and validate that the store exists.
Done. I extended SalesTable with both fields, added the enum, placed them in a new Contoso group on the header, and added validateContosoStore(). Deployed to your UDE; one test failed, fixed it, all 18 pass.
Read SalesTable, SalesTableForm and existing extensions
Created enum, table and form extensions
Build succeeded · 4m 12s
Deployed to Contoso Retail UDE · 6m 02s
Tests 17 / 18 · fixed validateContosoStore() · 18 / 18
12 files changed +184 -37✓ Compile   ✓ Tests
@@ -12,7 +12,46 @@ SalesTable_ContosoRetail_Extension
- next initValue();
+ next initValue();
+ this.ContosoDeliveryPriority = ContosoDeliveryPriority::Standard;
+ this.ContosoStoreId = ContosoStoreParameters::find().DefaultStoreId;
+ public boolean validateContosoStore()
+ {
+ if (!ContosoStore::exist(this.ContosoStoreId))
+ return checkFailed("@ContosoRetail:StoreNotFound");
Nothing is pushed until you approve.
View detailApprove & Push
Start here

Pick a codebase, pick an environment, ask.

Every conversation is pinned to one connected codebase and one connected environment. FO-Fox works on that repository and deploys to that environment, and the chat shows exactly which pair it's using.

Hello! I'm your D365FO copilot.

I can help you with development, configuration, troubleshooting, best practices and more.

</>Explain this error
▤Optimize this query
< >Generate X++ code
◌Best practice for batch
Ask anything about D365FO…
+
▣CodebaseContoso Retail · D365/Main▾
◉EnvironmentContoso-Dev (UDE)▾
➤
Ready · Working on D365/Main → deploys to Contoso-Dev
Your codebase

Connect your own codebase. FO-Fox works inside it.

Sign in with Microsoft Entra ID, pick the Azure DevOps repository, and tell FO-Fox where your project and models live. From then on every answer and every change is grounded in your actual code, not generic D365FO.

Connected codebases (3)+ Connect repository
Contoso Retail● Connected
Connection
Azure DevOps · Contoso
Repository
D365/Main
Project folder
D365/Main/Project
Model location
D365/Main/Metadata
Fabrikam Finance● Connected
Connection
Azure DevOps · Fabrikam
Repository
Fabrikam/D365FO
Project folder
Fabrikam/D365FO/Project
Model location
Fabrikam/D365FO/Metadata
Litware Solutions● Connected
Connection
Azure DevOps · Litware
Repository
Litware/D365
Project folder
Litware/D365/Project
Model location
Litware/D365/Models

Repository structure is synced and paths are validated automatically.

Your dev environment

Deployed and tested in your own UDE, before you look at it.

FO-Fox gives you a dedicated account for each environment. Add it as a user in your Unified Development Environment once, click verify, and you're connected. After that, every task is built, deployed to that environment, tested and debugged there, so the code you review has already run in a real D365FO instance.

Connected environments (3)+ Connect environment
Contoso Retail● Connected
Environment
Contoso-Dev (UDE)
Environment URL
orgf3a2c1d7.crm5.dynamics.com
FO URL
contoso-dev.operations.dynamics.com
FO-Fox account
contoso@agents.fofox.app Copy
Access
Verified · Developer role
Fabrikam Finance● Connected
Environment
Fabrikam-Dev01 (UDE)
Environment URL
org9b4e2a10.crm5.dynamics.com
FO URL
fabrikam-dev01.operations.dynamics.com
FO-Fox account
fabrikam@agents.fofox.app Copy
Access
Verified · Developer role
Litware Solutions● Waiting for access
Environment
LW-Dev (UDE)
Environment URL
org71c8d5e9.crm5.dynamics.com
FO URL
lw-dev.operations.dynamics.com
FO-Fox account
litware@agents.fofox.app Copy
Access
Add this user to the environment with a developer role, then Verify access

FO-Fox gives you one account per environment. You add it as a user; nothing else is shared.

Review

See the code and see it running, before you approve.

Every task comes back with two tabs: the full diff, and screenshots captured while the tests ran on the real D365FO form. Approve with the evidence in front of you.

Add custom fields to SalesTable
SalesTable_Extension.xppMetadata/ContosoRetail/AxClass+42 -3
@@ -12,7 +12,46 @@ SalesTable_ContosoRetail_Extension
public void initValue()
{
- next initValue();
+ next initValue();
+ this.ContosoDeliveryPriority = ContosoDeliveryPriority::Standard;
+ this.ContosoStoreId = ContosoStoreParameters::find().DefaultStoreId;
}
+ /// <summary>Validates the store before the order can be confirmed.</summary>
+ public boolean validateContosoStore()
+ {
+ if (!ContosoStore::exist(this.ContosoStoreId))
+ {
+ return checkFailed("@ContosoRetail:StoreNotFound");
+ }
+ return true;
+ }
SalesTable.xml +31ContosoDeliveryPriority.xml +24SalesTableForm_Ext.xml +38ContosoRetail_en-US.label.txt +11SalesTableTest.xpp +26+ 6 more
Nothing is pushed until you approve.
Approve & Push

Assign tickets to FO-Fox from the system you already use.

We're shipping an MCP server for FO-Fox. Your existing ticket system bot hands the task to a FO-Fox worker, and the result comes back to the same ticket. Your team keeps working the way it does today.

  1. Your ticket bot

    Assign the ticket

    The bot dispatches the ticket to a FO-Fox worker with a FO-Fox MCP tool.

  2. FO-Fox worker

    Build, deploy, test

    It changes your codebase, builds, deploys to your UDE and runs the tests.

  3. Ticket system

    Status updated

    The ticket moves to review, with the changes and the test evidence attached.

  4. You

    Review and approve

    Check the diff and screenshots. Nothing is pushed until you approve.

Works with any ticket system bot that can call MCP tools.

Bring your own token

Run FO-Fox on your own model account.

Sign in with OpenRouter and FO-Fox runs on your OpenRouter credits, with any model they offer. Or paste your own API key from Anthropic, OpenAI, Google or Azure OpenAI. Either way, model usage is billed by the provider straight to your account.

  • OpenRouter sign-in. One click, no keys to copy. Use the credits you already have.
  • Your own API keys. Keep your existing provider contract, limits and data terms.
  • Pick the model per task. Switch between providers whenever you like.
Model providerUsing OpenRouter
OR
OpenRouterSigned in · Contoso team
Disconnect
Credits
$31.20 left
Default model
anthropic/claude-sonnet-5

or use your own API key

AAnthropicsk-ant-••••a41FVerified
OOpenAIsk-proj-••••9Qe2Verified
GGoogle GeminiNo key addedAdd key
AzAzure OpenAINo key addedAdd key

Keys are checked when you add them and are never shown again in full.

Early access

Get FO-Fox before it goes public.

Your role
Team size (D365FO devs)

Almost there

Your email app should have opened with your request. Send it and we'll be in touch.