From ADO Backlog Toolkit
Add traceability columns to a spreadsheet source and write created Azure DevOps ticket IDs/URLs back into it, matched row-by-row by key. Use this right after creating work items — when you have a backlog_result.json and the original source was a spreadsheet (xlsx/csv). Triggers on "write the ticket links back", "track which row got which ticket", "update the spreadsheet with the ADO IDs", "fill in the ticket column", "close the loop on the audit sheet", or any request to record created-item IDs back onto the source rows. Runs the bundled tracking.py (add-columns + writeback). For doc/pasted-text input there are no rows to write to — in that case just report the created links instead.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ado-backlog:ado-writeback-trackingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Closes the loop: once items exist in ADO, stamp their IDs and URLs back onto the
Closes the loop: once items exist in ADO, stamp their IDs and URLs back onto the
spreadsheet the findings came from, so every row shows which ticket it became.
This makes the source self-tracking — anyone reopening the sheet sees status
without cross-referencing ADO. The link between a row and its ticket is the
key field (see ${CLAUDE_PLUGIN_ROOT}/references/data-contracts.md),
carried from [[extract-findings]] (keyColumn) through backlog_result.json.
.xlsx / .csv / .tsv). There must be one
row per finding to write back to.backlog_result.json in chat. Don't fabricate a spreadsheet to write to.backlog_result.json from [[ado-create-work-items]] (which runs
create-backlog.cs). Each items[].id is the created work item; rows whose
key has no matching created id are simply skipped.Back up the user's source file first — tracking.py edits it in place and
overwrites it. A quick copy keeps you safe if a key mismatch or wrong --key
sends links to the wrong rows:
Copy-Item "<file>.xlsx" "<file>.bak.xlsx"
Appends Ticket ID, Ticket URL, WI State, Created after the last used
column. Safe to run repeatedly — columns that already exist are not duplicated.
Run this once before the first writeback so the target columns exist:
python "${CLAUDE_PLUGIN_ROOT}/scripts/tracking.py" add-columns --source "<file>" --key "#"
It prints which columns map to which letters (xlsx) or confirms they're ensured
(csv). --key defaults to # if omitted, but pass it explicitly to match.
Matches each backlog_result.json item's key to the value in the source's key
column and fills the four tracking columns. Rows that already hold a Ticket
ID are left as-is, so re-running after a partial create only fills the new
rows:
python "${CLAUDE_PLUGIN_ROOT}/scripts/tracking.py" writeback --source "<file>" --result "<path>/backlog_result.json" --key "#"
Per row it writes:
Ticket ID ← items[].idTicket URL ← https://dev.azure.com/{org}/{project}/_workitems/edit/{id} (built from the org/project in backlog_result.json)WI State ← New (the state freshly created items land in)Created ← a YYYY-MM-DD HH:MM timestampIt logs each key -> #id, prints the parent link if one exists, and ends with
wrote N ticket links back to source.
--key must line up across all three filesThis is the single most common failure. The --key you pass here must be the
same column name as:
keyColumn chosen in [[extract-findings]] (e.g. #, ID, Row), andkey value carried in backlog_input.json and backlog_result.json.Values are compared as strings. If the script prints
warn: key <x> not found in source, the key in the result doesn't match any
value in that column — re-check --key (right column?) and that the source
hasn't been re-sorted or had rows removed since extraction. If it raises
missing column '<name>' — run add-columns first, you skipped Step 1 (or pointed
--key at a column that isn't in the sheet).
backlog_result.json (abridged):
{ "org": "Cartagena365", "project": "GlassHull",
"items": [ { "key": "1", "id": 6073, "type": "Bug", "title": "..." } ] }
After writeback, the source row whose # column is 1 gains:
Ticket ID=6073, Ticket URL=https://dev.azure.com/Cartagena365/GlassHull/_workitems/edit/6073,
WI State=New, Created=2026-06-02 14:05.
npx claudepluginhub thodsaphonsonthiphin/workflow-daily-work --plugin ado-backlogProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.