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 SalesTableReady for review
12files changed+184 -37
18/18tests passedDeployed to Contoso-Dev
Nothing is pushed until you approve.
View detailApprove & Push
See it in action

From ticket to reviewed change in one run.

A ticket is assigned to FO-Fox. It reads your code, makes the change, builds, deploys to your UDE and runs the tests. When it's done, the ticket moves to review and the diff waits for you.

Security and data

Your code stays yours.

Where your code goes, what FO-Fox can reach, and what it keeps. Nothing is used for training and nothing is sold.

Work VMs are thrown away

Each task runs on its own VM, which is deleted when the task finishes. Code and data used during development aren't kept.

What we keep, and why

Only what the app needs to run: your Azure DevOps connection, your UDE connection and your chat history. It is stored in the US or the EU, based on your region.

No training, no reselling

Your code, data and chats are never used to train models and are never sold or shared with third parties. The only exception is the model provider that runs each task.

Access you grant, and can remove

FO-Fox uses one dedicated account per environment, which you add as an admin on that dev environment only. It clones and pushes only to the repository you connect, and nothing is pushed until you approve. Remove either and its access ends.

Dev environments only

FO-Fox builds, deploys and tests in the UDE dev environments you connect. It is never given access to production.

Models in your region

By default FO-Fox runs DeepSeek V4.1 Flash, hosted by Sference in the EU or DeepInfra in the US, both with zero data retention. Nothing is sent to DeepSeek itself. Or bring your own key and your chats go only through the provider you already use.

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 FO-Fox, your D365FO assistant.

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 an admin 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.fo-fox.com Copy
Access
Verified · Admin
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.fo-fox.com Copy
Access
Verified · Admin
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.fo-fox.com Copy
Access
Add this user to the environment as an admin, 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.

Works with Jira, GitHub Issues and any other ticket system bot that can call MCP tools. 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.

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.

Almost there

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