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
Release files for azdo-daily 1.7.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| azdo_daily-1.7.3.tar.gz | 24.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| azdo_daily-1.7.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.3 kB
Release files / azdo_daily-1.7.3.tar.gz
| Download URL | azdo_daily-1.7.3.tar.gz |
|---|---|
| Size | 24.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2fbff15e0cd82d006c086925aba4660cc0e0170e77b271389619347dec62784e
|
|
BLAKE2b-256 checksum How to use checksums |
17d4be4fc2dac1f06e86ba76da5304291d5d6d7f05c870888f91000f6e2d0baa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / azdo_daily-1.7.3-py3-none-any.whl
| Download URL | azdo_daily-1.7.3-py3-none-any.whl |
|---|---|
| Size | 21.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f7b642888fa37d6efc9eb6fd53233e11c9a8dbc41c8116a2a594caacc1eab4bc
|
|
BLAKE2b-256 checksum How to use checksums |
04a0ab5c8f9d417f53b44fd7cda3164b5136b659004b5a3e1ac396e87604949c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|