AzureDevOpsExcelSync 1.0.4

dotnet tool install --global AzureDevOpsExcelSync --version 1.0.4
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local AzureDevOpsExcelSync --version 1.0.4
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=AzureDevOpsExcelSync&version=1.0.4
                    
nuke :add-package AzureDevOpsExcelSync --version 1.0.4
                    

AES — Azure DevOps Excel Sync

An interactive CLI tool that syncs Azure DevOps work items with Excel. Pull a work item hierarchy into a spreadsheet, edit it locally, then push changes back — with a dry-run preview before anything is written.

Works with any Azure DevOps process template: Agile, Scrum, CMMI, or custom. No configuration needed — hierarchy structure is detected automatically at runtime.

AES demo

Installation

Requires .NET 10 SDK.

dotnet tool install -g AzureDevOpsExcelSync

To update an existing installation:

dotnet tool update -g AzureDevOpsExcelSync

<details> <summary>Install from source</summary>

git clone https://github.com/NavneetHegde/AzureDevOpsExcelSync
cd AzureDevOpsExcelSync
dotnet pack src/AzureDevOpsExcelSync/AzureDevOpsExcelSync.csproj
dotnet tool install --global --add-source ./src/AzureDevOpsExcelSync/nupkg AzureDevOpsExcelSync

</details>

Quick Start

AES

On first run, configure your Azure DevOps connection:

/config org     https://dev.azure.com/your-org
/config project YourProjectName
/config pat     your-personal-access-token

Settings are stored in ~/.aes/config/settings. The PAT is stored separately — see PAT Storage & Security below.

Commands

Type / at the prompt to open an interactive command picker. Arrow keys navigate the list, Enter selects and runs the command, Tab auto-completes it into the prompt for editing, Esc dismisses the picker.

Command Description
/pull <id> [--out file.xlsx] Fetch a work item and its full hierarchy into an Excel file
/push <file.xlsx> [--force] Preview and push Excel changes back to Azure DevOps
/clone <id> Duplicate a work item and all its children
/cost <id> Display an estimates table (original / remaining / completed hours)
/config <key> <value> Set a configuration value (see Configuration)
/status Show all current configuration values
/help List all commands (including loaded plugins)
/clear Clear the screen
/exit Exit the tool

Workflow Example

# Pull Epic #1234 and all children into Excel
/pull 1234

# Open ~/.aes/excel/workitem_1234.xlsx, edit the yellow cells, save

# Preview what will change, then confirm to push
/push ~/.aes/excel/workitem_1234.xlsx

The Excel file has yellow cells for editable fields and grey cells for read-only metadata. Editable fields are:

  • Title, Description, State, Assigned To
  • Area Path, Iteration Path, Tags, Priority
  • Story Points, Original Estimate, Remaining Work, Completed Work

Supported Hierarchy

/pull works with any two-level hierarchy. It detects structure automatically — no type names are assumed:

Epic
└── Feature
    └── <Parent Item>        ← e.g. User Story, Product Backlog Item, Requirement
        └── <Child Item>     ← e.g. Task

If the work item you pull has no children, it is treated as a standalone item. If a child has its own children, AES recurses deeper until it reaches the two-level boundary.

The resulting Excel workbook has one sheet per parent item, plus a combined Work Items sheet used by /push.

Configuration

All settings are stored in ~/.aes/config/settings and can be viewed with /status.

Key Description Default
org Azure DevOps organisation URL (not set)
project Project name (not set)
pat Personal access token (stored securely) (not set)
estimate Field name used as Original Estimate in /cost Microsoft.VSTS.Scheduling.OriginalEstimate
remaining Field name used as Remaining Work in /cost Microsoft.VSTS.Scheduling.RemainingWork
completed Field name used as Completed Work in /cost Microsoft.VSTS.Scheduling.CompletedWork

Customising /cost fields

If your process template uses different field names for hour tracking, override the defaults:

/config estimate  My.Custom.EstimateField
/config remaining My.Custom.RemainingField
/config completed My.Custom.CompletedField

Run /status at any time to confirm what fields are in use.

PAT Requirements

Your Personal Access Token needs Work Items (Read & Write) scope in Azure DevOps.

To create one: Azure DevOps → User Settings → Personal Access Tokens → New Token.

PAT Storage & Security

The PAT is stored separately from other settings and never written to the general config file.

Windows — encrypted using Windows DPAPI (DataProtectionScope.CurrentUser). The encrypted bytes are saved to ~/.aes/config/.pat. Only the Windows user account that encrypted it can decrypt it — other users on the same machine, or the same file copied to another machine, cannot be used to recover the PAT.

macOS / Linux — stored as plain text in ~/.aes/config/.pat with file permissions set to 600 (owner read/write only), so other OS users cannot read it.

In both cases, the PAT is held in memory only for the duration of the session and is never logged or echoed to the terminal.

Plugin System

AES supports third-party plugins. Create a .NET class library that references AES.dll, implement IAesPlugin, and drop the compiled .dll into ~/.aes/plugins/. AES picks it up automatically on the next launch — no recompilation of AES required.

public class ReportPlugin : IAesPlugin
{
    public string Command     => "report";
    public string Description => "Generate custom HTML report";

    public async Task ExecuteAsync(string[] args, AesContext ctx)
    {
        var client = ctx.Connect();   // WorkItemTrackingHttpClient
        // use ADO client freely
    }
}
# Build your plugin
dotnet build MyPlugin.csproj -o ~/.aes/plugins/

# Launch AES — plugin loads automatically
AES
  🔌  Plugin loaded: /report  — Generate custom HTML report

Loaded plugins appear under a Plugins section in /help and in the interactive picker when you type /. Each plugin receives an AesContext with the configured Org, Project, Pat, and a Connect() helper that returns a ready-to-use WorkItemTrackingHttpClient.

License

MIT — © Navneet Hegde

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.0.4 91 3/13/2026
1.0.3 92 3/12/2026
1.0.2 103 3/12/2026 1.0.2 is deprecated because it has critical bugs.
1.0.1 101 3/12/2026 1.0.1 is deprecated because it has critical bugs.
1.0.0 105 3/12/2026 1.0.0 is deprecated because it has critical bugs.