Azure DevOps daily task automation with AI task breakdown
Project description
Azure DevOps Daily Task Automation
Python CLI for automating daily task creation, activation, and completion logging in Azure DevOps with AI-powered task breakdown via Claude.
- AI Task Breakdown — Claude reads user stories and generates concrete development tasks
- Interactive Workflow —
create→start→update→endpipeline - Auto-linking — Tasks linked to parent stories, related across multiple stories
- Progress Tracking — Log hours, remaining estimates, completion notes
- Global CLI — Install once, use anywhere:
azdo-daily configure
Installation
From PyPI (recommended)
pip install azdo-daily
azdo-daily configure
From source
Clone repository:
git clone https://github.com/MrShakila/Azdo-Daily.git
cd Azdo-Daily
pip install .
Or install in development mode:
pip install -e ".[dev]"
Requirements
- Python 3.9+
requestslibrary (auto-installed)- Anthropic API key (for AI task breakdown)
- Azure DevOps Personal Access Token (PAT)
Use from anywhere:
azdo-daily configure
azdo-daily status
Configuration
On first run, configure your settings:
azdo-daily configure
Configuration stored in .config/settings.json (project-local, excluded from git).
Interactive prompts for:
| Field | Description |
|---|---|
org |
Your Azure DevOps organisation name |
project |
Project name |
pat |
Personal Access Token — needs Work Items (Read & Write) scope |
anthropic_api_key |
From console.anthropic.com — for AI task breakdown |
assigned_to |
Your email/display name — used to filter stories |
area_path |
Default area path for new tasks (optional) |
Project Structure
azdo_daily/
├── main.py — Entry point: argument parsing + command dispatch
├── config.py — Configuration: load/save/validate settings
├── state.py — Daily state: load/save work items per day
├── ui.py — Terminal UI: colors, prompts, formatters, selection helpers
├── azdo.py — Azure DevOps API client: work item operations
├── ai.py — Claude AI: task breakdown from stories
└── commands.py — Command handlers: configure, create, start, update, end, status
Key Modules
azdo.py — Azure DevOps API client
session()— authenticated HTTP sessionwit_base()— Work Item Tracking API base URLget_my_stories()— fetch assigned stories via WIQLcreate_task()— create new task linked to storiesset_workitem_state()— change work item stateresolve_task()— mark task complete with hours + commentpartial_task()— log progress, keep task open_patch_workitem()— internal: apply JSON Patch operationsadd_comment()— internal: append work item comment
commands.py — CLI command handlers
cmd_configure()— interactive setupcmd_create()— select stories → generate tasks → create in Azure DevOpscmd_start()— activate tasks (mark In Progress)cmd_update()— log progress on taskscmd_end()— mark tasks done + auto-resolve storiescmd_status()— show today's stories and tasks
ui.py — Terminal UI helpers
- Color constants:
R,B,DIM,GR,YL,BL,CY,RD,MG - Output:
ok(),err(),info(),warn(),hdr(),sep() - Input:
ask()(prompt with optional default) - Formatters:
print_stories(),print_tasks() - Selection:
parse_selection(),select_from_list()(handles "all") - Conversion:
float_or_none()
Daily Workflow
Setup (once)
azdo-daily configure
Morning — Create tasks
azdo-daily create
- Fetches all active User Stories assigned to you
- You select stories to work on (e.g.
1or1,3or2-4) - Choose task creation method:
- Use template — Auto-generate standard tasks (UI, Logic, Unit Test)
- AI auto-breakdown — Claude reads story and generates tasks
- Manual entry — Type tasks yourself
- Template + AI — Generate template tasks + AI suggestions, then review
- If multiple stories: tasks created once, linked to all (child of #1, related to rest)
- Task names include story title (e.g., "UI | My Story Title")
- Tasks appear in Azure DevOps immediately with direct links
Activate tasks
azdo-daily start
Marks selected new tasks as "In Progress" and auto-activates linked stories.
Anytime — Check status
azdo-daily status
Shows active stories and all tasks with open/resolved counts.
Throughout day — Log progress (optional)
azdo-daily update
Log hours spent and remaining estimates on open tasks (keeps them "In Progress").
Evening — Mark complete
azdo-daily end
- Lists all open tasks for today
- You select which to complete (e.g.
1,3orall) - For each: enter hours spent + optional closing note
- Task marked done + hours logged
- If all tasks for a story are done → story auto-resolved
Maintenance Commands
Reconfigure credentials
azdo-daily reconfigure
Update your Azure DevOps org, project, PAT, or Anthropic API key. Prompts to confirm before overwriting.
Clear task history
azdo-daily clear-history
Delete all daily state files (state/*.json). Keeps configuration. Useful for starting fresh after month/week.
State Files
Each day's data in state/YYYY-MM-DD.json:
{
"stories": [
{"id": 42, "title": "Implement auth"}
],
"tasks": [
{
"id": 101,
"title": "Add login endpoint",
"url": "https://...",
"closed": false,
"start_date": "2026-05-19T09:30:45.123456",
"completed_hours": 2.5,
"remaining_hours": 1.0,
"story_ids": [42]
}
]
}
Cron (optional)
Status reminder at 9 AM weekdays:
0 9 * * 1-5 azdo-daily status
start,update, andendcommands are interactive — use cron forstatusonly.
Troubleshooting
"Work item X does not exist"
Task IDs in state file no longer exist in Azure DevOps. Reset today's state:
rm ~/.config/azdo_daily/state/2026-04-29.json # or today's date
azdo-daily create
"anthropic_api_key not set"
Run configure and enter Anthropic API key from console.anthropic.com:
azdo-daily configure
"Personal Access Token (PAT) invalid"
Regenerate PAT in Azure DevOps → User Settings → Personal Access Tokens. Must have Work Items (Read & Write) scope.
ModuleNotFoundError after install
Reinstall in development mode:
pip install -e .
Development
Install with dev tools:
pip install -e ".[dev]"
Install pre-commit hooks:
pip install pre-commit
pre-commit install
Format code (auto-runs on commit via pre-commit):
black azdo_daily/
Lint code:
flake8 azdo_daily/
See CONTRIBUTING.md for full development guide.
License
MIT — see LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file azdo_daily-1.7.2.tar.gz.
File metadata
- Download URL: azdo_daily-1.7.2.tar.gz
- Upload date:
- Size: 24.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a555124cbc3a833c9835b8d8e97d6933f37a4fecf130596ebca1eba53fe36bc
|
|
| MD5 |
e0d6330377ee8e73c565c220e816bbf1
|
|
| BLAKE2b-256 |
cc2f9d14789baa55e4de8f22f3cec720e76a1cbe5d461fb031bb93da3c408b65
|
File details
Details for the file azdo_daily-1.7.2-py3-none-any.whl.
File metadata
- Download URL: azdo_daily-1.7.2-py3-none-any.whl
- Upload date:
- Size: 21.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e876bb08ed5fff8c226ae1a7df6c7a30a8b15ef61fe898824c3cd942a6e2482d
|
|
| MD5 |
372c1b17c4afb3cc0c7db427cf1baf6e
|
|
| BLAKE2b-256 |
2810e37731802613995a0f7aacd9cf7ee10b7ad69e07b9cd870ab9f0057af29d
|