{"id":34705811,"url":"https://github.com/ipatalas/vscode-sprint-planner","last_synced_at":"2025-12-24T23:20:32.192Z","repository":{"id":36405069,"uuid":"174881405","full_name":"ipatalas/vscode-sprint-planner","owner":"ipatalas","description":"Plan your sprints in VSCode directly!","archived":false,"fork":false,"pushed_at":"2025-12-14T20:52:29.000Z","size":849,"stargazers_count":40,"open_issues_count":9,"forks_count":23,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-12-17T08:38:40.398Z","etag":null,"topics":["azure-devops","planning","vscode","vscode-extension"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipatalas.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-03-10T21:11:04.000Z","updated_at":"2025-12-14T20:51:50.000Z","dependencies_parsed_at":"2025-03-15T16:32:41.092Z","dependency_job_id":"79dbd403-82c7-43c1-8161-fe781333f271","html_url":"https://github.com/ipatalas/vscode-sprint-planner","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/ipatalas/vscode-sprint-planner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipatalas%2Fvscode-sprint-planner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipatalas%2Fvscode-sprint-planner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipatalas%2Fvscode-sprint-planner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipatalas%2Fvscode-sprint-planner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipatalas","download_url":"https://codeload.github.com/ipatalas/vscode-sprint-planner/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipatalas%2Fvscode-sprint-planner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28012119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure-devops","planning","vscode","vscode-extension"],"created_at":"2025-12-24T23:20:30.469Z","updated_at":"2025-12-24T23:20:32.184Z","avatar_url":"https://github.com/ipatalas.png","language":"TypeScript","funding_links":["https://www.buymeacoffee.com/0t1sqOM"],"categories":[],"sub_categories":[],"readme":"[![MarketPlace Tag](https://img.shields.io/visual-studio-marketplace/v/ipatalas.vscode-sprint-planner)](https://marketplace.visualstudio.com/items?itemName=ipatalas.vscode-sprint-planner)\r\n[![Visual Studio Marketplace Downloads](https://img.shields.io/visual-studio-marketplace/d/ipatalas.vscode-sprint-planner)](https://marketplace.visualstudio.com/items?itemName=ipatalas.vscode-sprint-planner)\r\n\r\n[![Coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-$4-orange?logo=buy-me-a-coffee\u0026style=flat)](https://www.buymeacoffee.com/0t1sqOM)\r\n\r\n# Sprint Planner for Azure DevOps\r\n\r\nSprint Planner is an extension for Visual Studio Code that helps manage sprints in projects hosted on Microsoft Azure DevOps. This extension is developed independently and is not affiliated with or endorsed by Microsoft.\r\nThis extension features the ability to export a planning session into the Azure DevOps system. Planning in Azure DevOps itself is hard, way too much clicking. It's so much easier to just type all the tasks in a simple text form and then just export them.\r\n\r\n## Usage\r\n\r\nTo start a planning session open a new file in vscode and change the language to `planner` (_Change Language mode_ command). This should enable the extension and all its features.\r\n\r\nBefore you can start you have to configure connection to your Azure DevOps account. For that you will need a URL and a token for authentication. For details please check the [Configuration](#configuration).\r\n\r\nNow it's time to start planning your first story. You can start by typing `US#` to get an autocomplete for user stories of current sprint:\r\n\r\n![user story autocomplete](images/planner-1.gif)\r\n\r\nIf you wish to add tasks for iteration other than current you can do so by choosing it at the beginning of the file:\r\n\r\n![iteration autocomplete](images/planner-2.gif)\r\n\r\nThen it's time to enter some tasks in the following manner:\r\n\r\n![user story autocomplete](images/planner-tasks.png)\r\n\r\nThe image should be pretty self-explanatory I hope. The numbers following the tasks are estimations. They will be filled in both **Original** and **Remaining Estimation** field in Azure DevOps. As you can see it can be specified in both hours (up to 2 decimal places) and minutes (integer).\r\n\r\nAt this point there is a Code Lens action above the user story that lets you publish the changes. Check it out. In case of something is not working just open Output panel and pick `Azure DevOps planner` channel to see what might be wrong. If it's not obvious just raise an issue.\r\n\r\n### Setting area path (since **0.5.0**)\r\n\r\nThere is an option to override default area path set by Azure DevOps. One can do so either in the settings (global and can be persisted between sessions) or inline:\r\n![area](images/areas.png)\r\n\r\nArea set inline applies to all user stories in all lines below until another area is specified. This means it can be combined like this:\r\n```\r\nArea: Area1\r\n\r\nUS#1\r\nUS#2\r\nUS#3\r\n\r\nArea: Area2\r\n\r\nUS#4\r\nUS#5\r\n...\r\n```\r\n\r\nIt supports autocompletion and some basic diagnostics to avoid typos.\r\n\r\n### Updating tasks\r\n\r\nSince **0.3.0** tasks can be updated. After a publish all published tasks should get their ID instered at the end of task line. Don't play with those IDs if you don't want to make a mess. Later on you can change the title or estimation and such task will get updated next time this User Story is published.\r\n\r\n### Creating User Stories\r\n\r\nApart from creating tasks you can now also create new user stories. Just use the snippet `create user story` or type it manually like this:\r\n\r\n![create user story](images/create-user-story.png)\r\n\r\nAfter publishing you will get User Story ID filled and you can add more tasks then or update existing ones:\r\n\r\n![user story created](images/user-story-created.png)\r\n\r\n### Synchronize tasks from Azure DevOps (since **0.5.0**)\r\n\r\nIt's now possible to pull the tasks from Azure DevOps:\r\n\r\n![sync-tasks](images/sync-tasks.gif)\r\n\r\nAll unsaved tasks added prior to synchronization will be preserved and merged into respective Activity.\r\nWhen you modify a task which is already saved in Azure DevOps and pull the tasks from Azure DevOps before publishing your changes, it will be overwritten by the data pulled from Azure DevOps. There is no confilct resolution feature available. When pulling, the one being pulled always wins.\r\nIt's just as Publish feature have worked since the beginning. When pushing changes they will always overwrite the original task/user story even if it has been modified by someone else in the meantime so please bear that in mind and be careful.\r\n\r\n## Configuration\r\n\r\nThis extension contributes the following settings:\r\n\r\n* `planner.azure-devops.organization`: Organization name\r\n* `planner.azure-devops.project`: Project name\r\n* `planner.azure-devops.team`: Team name\r\n* `planner.azure-devops.token`: Authentication token (https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops)\r\n* `planner.azure-devops.proxy`: Proxy to be used when connecting to Azure DevOps API (leave empty if your proxy is set in env under $HTTPS_PROXY or $HTTP_PROXY)\r\n* `planner.azure-devops.process`: Project process (currently only Agile and Scrum are supported)\r\n* `planner.azure-devops.debug`: whether to turn debug logging on or off\r\n* `planner.azure-devops.default.activity`: default Activity used when none is provided for the task (default: Development)\r\n* `planner.azure-devops.default.area`: default Area used when none is provided inline (default: empty -\u003e Azure DevOps default)\r\n* `planner.azure-devops.snippets`: custom tasks snippets that can be used (see [Task snippets](#task-snippets))\r\n\r\nTo change the settings please use `Preferences: Open User Settings` command (or `Workspace Settings` if you like to use different Azure DevOps accounts per workspace). This is by default bound to `Ctrl+,`.\r\nIn the settings expand `Extensions` section and look for this extension's settings.\r\n\r\n### Token permissions\r\n\r\nFor the token to work correctly it only needs one single scope: **Work Items (read \u0026 write)**\r\n![scopes](images/scopes.png)\r\n\r\n### Task snippets\r\n\r\nIt's often the case that some tasks repeat among all or almost all user stories. There is no need to type them all manually every time. It's a tedious task and should be automated. For instance we have automated tests. Additionally we do so called triangle meetings (BA/DEV/TEST) before starting the story to make sure we understand it correctly and also a short test pyramid meeting to preselect which tests go where (unit, integration, ui).\r\nGiven that activities we have 6 common tasks (actually it's even more but you get the point) that we should add to every single User Story on planning session. We never liked adding that manually.\r\n\r\nLet's handle this like a pro! Go to settings file (UI doesn't provide option to define this yet) so `Preferences: Open Settings (JSON)` command. Then just add a new setting called `planner.azure-devops.snippets` which is a map of snippets:\r\n\r\n``` JSON\r\n\"planner.azure-devops.snippets\": {\r\n    \"local_relative\": \"./.planner/relative_snippet\",\r\n    \"local_absolute\": \"D:\\\\my-snippets\\\\absolute_snippet\",\r\n    \"pastebin\": \"https://pastebin.com/raw/5eSr8eLZ\"\r\n},\r\n```\r\n\r\n\u003e Note: it can be either a local file or HTTP(S) direct link to a file\r\n\r\nThe format of the file is as in the example: https://gist.github.com/ipatalas/8bb7b2fdb2e1c26dc8249659791cf56e#file-taxes\r\n\r\nIt will be read only once when activating the extension (usually first time you open a `planner` file) and then cached. From now on you can simply use names of those snippets as snippets in the editor like this:\r\n\r\n![snippets](images/snippets.gif)\r\n\r\nIsn't it better than you used to do it?\r\n\r\n## Complementary extensions\r\n\r\nI am using another extension to make it easier to change the estimations:\r\n\r\n![incrementor](images/incrementor.gif)\r\n\r\nThere are few similar extensions available on the market. I picked [Incrementor](https://marketplace.visualstudio.com/items?itemName=nmsmith89.incrementor).\r\nVSCode allows you to bind any commands to a key so I bound increment/decrement to `Ctrl+Shift+Up` and `Ctrl+Shift+Down` but that's up to you.\r\n\r\n\u003e **Update**: apparently there is such an option built-in. Check `Emmet: Increment by 1` and similar commands. Still using *Incrementor* though to easily toggle between **let/const/var** or **private/public**. Pick whatever suites you more.\r\n\r\n## Roadmap\r\n\r\n- ~~ability to define arbitrary activity type (hardcoded to 'Development' now)~~\r\n- ~~option for partial update (take already published tasks into account)~~ 👉 [Updating tasks](#updating-tasks)\r\n- ~~snippets for \"taxes\" tasks (common tasks among many user stories, eg. unit tests)~~ 👉 [Task snippets](#task-snippets)\r\n- want more? open an issue or PR\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipatalas%2Fvscode-sprint-planner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipatalas%2Fvscode-sprint-planner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipatalas%2Fvscode-sprint-planner/lists"}