Skip to main content
Last reviewed: 2026-08-07 Freshness source: cmd/bd/ado*.go and internal/ado/. This guide covers all configuration options for the bd ado sync command, which synchronizes beads issues with Azure DevOps work items. Proxied-server mode: bd ado sync, bd ado status, and bd ado projects are not supported when bd is connected to a proxied server (error: ado sync is not supported in proxied-server mode); run them from a workspace with direct database access.

Quick Start

Connection Configuration

¹ Either ado.org or ado.url must be set. Use ado.url for on-premises Azure DevOps Server. ² At least one project must be configured via ado.project or ado.projects. Config vs env var precedence: Config keys (set via bd config set) take priority over environment variables. ado.pat is a secret key stored in config.yaml (per-repo or user-global), never the shared database, so the PAT cannot leak via dolt push.

On-Premises ADO Server

For Azure DevOps Server (on-prem), use ado.url instead of ado.org:

Multi-Project Sync

Sync across multiple projects in a single command:
The first project is used as the primary for URL construction. WIQL queries use TeamProject IN (...) for multi-project support.

Filter Configuration

Filters control which ADO work items are included in sync operations. CLI flags override config values for that sync run. WIQL query example (generated from filters):

Default Mappings

Priority Mapping

Priority mapping is bidirectional but lossy for P3/P4:
Note: Beads P3 and P4 both map to ADO priority 4. On a fresh pull into an empty database, ADO 4 maps back to beads P3. The original priority is not preserved across a full round-trip for P4 issues.
For Bug-type work items, ADO also requires a Severity field:

Status Mapping

Blocked status: ADO has no native blocked state. beads maps blocked to Active and adds a beads:blocked tag. On pull, Active + beads:blocked tag restores StatusBlocked. Override defaults for your process template:

Type Mapping

Reverse mapping (ADO → beads) also recognizes:
  • Product Backlog Itemfeature (Scrum template)
  • Issuetask
Override for your process template:

Process Template Configuration

ADO supports multiple process templates with different work item types and state transitions. The defaults assume the Agile template. Override mappings for other templates.

Agile (Default)

No configuration needed. Default mappings work out of the box. State transitions:

Scrum

State transitions:

CMMI

State transitions:

State Transition Handling

When creating a work item in a non-initial state (e.g., pushing a closed issue), beads:
  1. Creates the item in the initial state (e.g., New)
  2. Transitions through intermediate states to reach the target
  3. Example: Creating a closed Bug → New → Active → Resolved → Closed
If a direct transition fails (ADO returns 400), beads automatically walks the known transition path for the work item type and process template.

Sync Options

Direction

Conflict Resolution

When the same issue has been modified both locally and in ADO:

Additional Flags

Reconciliation

A reconciliation scan re-checks work items beads already tracks, so items deleted in ADO (404) or no longer readable (403) are detected instead of lingering. It does not run on every sync — that would cost an API call per tracked item — so it runs periodically, and --reconcile forces it immediately. ado.syncs_since_reconcile also appears in config: it is the counter beads keeps to know when the next scan is due, not a setting to edit.

PAT Permissions

The Personal Access Token needs these scopes: Generate a PAT at: https://dev.azure.com/{org}/_usersettings/tokens

Metadata Preserved

beads stores ADO-specific metadata for round-trip fidelity:

Description Conversion

  • Push (beads → ADO): Markdown converted to HTML
  • Pull (ADO → beads): HTML converted to Markdown

Tags and Labels

  • ADO tags are semicolon-separated; beads labels use arrays
  • User labels round-trip through ADO tags
  • Internal beads:* tags (e.g., beads:blocked) are filtered on pull — they don’t appear as user labels

API Limits

Troubleshooting

Common Errors

ado.pat not configured: set via 'bd config set ado.pat <token>' or AZURE_DEVOPS_PAT env var
ado.org not configured: set via 'bd config set ado.org <org>' or AZURE_DEVOPS_ORG env var
State transition errors (400 Bad Request) This usually means the process template doesn’t support a direct state change. Check your ado.state_map.* config matches your actual process template. Type not found errors Verify your ado.type_map.* config matches the work item types available in your project. Use --types filter to restrict which types are synced.

Debugging