On this page you will turn a piece of work into a plan in DevStride that the delivery loop (the /devstride:* commands that build, review and merge one item at a time) can walk by itself. You will see how this organization arranges its work, hold the planning conversation, date the plan, and add to it as you learn more.
/devstride:plan asks before it creates anything. /devstride:comprehend-plan is the one planning command that only reads.devstride plugin for Claude Code, whose commands all start with /devstride:./devstride:doctor, which checks the plugin, the DevStride connection and the repository's settings, and offers the repairs that are safe to make.plan, comprehend-plan, rationalize-gantt and rebalance (and setup, doctor, ci-audit). Doing: build-item, insert-story, insert-defect, create-story, create-defect, pr, review, push and release. A session that has run one kind refuses the other and says why: every turn re-sends the whole conversation, so mixing the two makes everything after the switch cost more. Run /clear, then the same command again. To stay in the same session on purpose, add --same-session to the command.Engineering work in this organization uses four levels of DevStride item. The plugin thinks in three roles, and .claude/ds-config.json maps this organization's names onto them under hierarchyRoles: the release unit is Epic, and the leaves are Story and Defect.
| Item type | Sits under | Role in the delivery loop |
|---|---|---|
| Solution | nothing (top level) | Grouping item: holds Capabilities |
| Capability | a Solution | Grouping item: holds Epics |
| Epic | a Capability | Release unit. Its Stories collect on the Epic's own branch, where they may be unfinished, and the finished Epic reaches develop in one fully reviewed pull request. So each Epic must be a slice of value a user can see or use on its own, and safe to put in production the moment it merges. |
| Story | an Epic | Leaf. One piece of buildable work; this is what the loop builds. |
| Defect | an Epic | Leaf. A bug fix, built exactly like a Story. |
The organization has other item types for other teams (support requests, sales, compliance); engineering plans use only this chain. Two placement rules apply here as well:
ds-board-hygiene skill audits both rules.Configuration Reference: DevStride hierarchy roles has the setting itself.
A blocked by link says "this item cannot start until that one is Done". Blocks is the same link read from the other end. (The tools call them blocked_by and blocks.)
The loop never chooses what to build by judgement. It takes the highest-priority Story or Defect that is not Done and whose blockers are all Done, inside the earliest-dated open parent item; priority breaks ties, then start date. So a plan's links are its build order.
A good plan has the true shape of the work, not one long line:
Every Story and Defect in a plan has at least one link. One with no link and no [N] number (below) looks like a one-off (work outside any plan) to the loop, which then sends it to the support train (the shared branch for one-offs) instead of its Epic's branch.
Parallel branches in a plan describe its shape. The loop still builds one item at a time, on purpose: its DevStride writes are live, and it walks the dependency chain in order.
One word sets how much rigor the loop spends on each item: how finely the plan is sliced, how deep each spec goes, how broadly each change is reviewed, which review findings are fixed straight away, and which local checks an item must pass before it merges. The four profiles are prototype, standard, extended and enterprise.
standard, set by profile in .claude/ds-config.json, with a few settings pinned on purpose. For example, a finished Epic always waits for the owner (the person who decides what reaches production) instead of releasing itself./devstride:plan I##### prototype, and the plan root (the parent item you plan under) gets a line Delivery profile: prototype at the top of its description. That line wins over the repository setting for everything under that root.standard. Every command says which profile it is using and where it came from./devstride:rebalance I##### <profile>. It re-slices the items that have not started and rewrites the line in one go. Editing the line by hand would leave items sliced for the old profile; see Rebalancing a plan.The four profiles side by side are in Choose a delivery profile, and every setting is in the Configuration Reference.
/devstride:plan/devstride:plan is a conversation, not a document generator. It asks, you decide, and it builds nothing until you have agreed the shape.
/devstride:plan I#####
Delivery profile: line on the parent, unless the parent or an item above it already carries one. It also checks Enable Link Mode (below) now, so you can turn it off while it drafts./devstride:rationalize-gantt (below), then stamps execution-order numbers into the Story titles.[1]…[N] range. It saves the plan root in Claude Code's project memory on this machine, so a bare /devstride:build-item later picks up this plan.You can run /devstride:plan on the same parent again later; it treats the second run as an extension and only adds.
In DevStride, under your parent item:
Delivery profile: standard, or the profile you chose (unless an item above it already carried a profile line);[N] …;[N] is the build order, stamped into each Story's or Defect's title, such as [7] Export button on the board toolbar. [1] to [N] are stamped when the plan is written, in the order the loop will build them. Items added later get a dotted number that sorts between their neighbours, such as [7.1]. Nothing renumbers a plan by itself, even when its dates move, so a [N] that disagrees with date order is expected. Only an explicit request from the owner renumbers one.
When you refer to an item, use its item number, never its [N]. The item number is I followed by digits, assigned by DevStride. It never changes, and it is what DevStride's GitHub integration recognises and links. A [N] can be renumbered, and then a sentence that cites it points at a different item. This applies everywhere: descriptions, comments, commits, pull requests and code comments.
Never make up an item number, even as a placeholder. Look the item up and check its title before you write its number anywhere. If the work has no item yet, create the item first and use the number DevStride gives it. A plausible-looking number is the address of someone else's live item.
/devstride:rationalize-ganttFirst, turn off the organization-wide auto-scheduler. DevStride has one setting, Enable Link Mode in Settings → Organization, that applies to the whole organization, not to one roadmap or view. While it is on, DevStride moves the dates of items that have blocked-by links by itself and overwrites the dates the planning commands write; it has been seen pushing dependent items far into the future. Every command that writes dates or links reads this setting first and asks you to turn it off if it is on. None of them ever changes it for you.
Then run, with the plan root's number:
/devstride:rationalize-gantt I#####
It never changes titles, so [N] numbers stay as they are. Run it after any structural change to a plan; /devstride:plan runs it for you. More detail: The Planning Loop.
/devstride:insert-story and /devstride:insert-defectWhen the build or a review turns up new work that belongs in the plan, splice it into the plan rather than leaving it as a sentence in a pull request, which nobody reads once it closes.
/devstride:insert-story I##### <what the story is>
/devstride:insert-defect I##### <the bug: how to reproduce it, expected and actual>
I##### is the parent the new item belongs under; without one, the command asks. Each command:
A Defect often deserves to jump ahead of planned Stories. The command asks you before it moves a Defect earlier than a normal insert.
Neither command writes code. Build the new item with /devstride:build-item <its number>, or let the loop reach it. These two count as "doing" commands for the session rule above, so run them in your build session.
/devstride:create-story and /devstride:create-defectFor work that belongs to no plan, such as a customer request or a small fix found along the way, create a one-off:
/devstride:create-story <what is needed>
/devstride:create-defect <the bug: how to reproduce it, expected and actual>
[N] number and no dependency links. That missing splice is what makes it a one-off./devstride:build-item, then stops instead of moving on to another item.In this repository a one-off lands on the support train, a long-lived branch that every release carries into develop, and it is Done only when the next release does that. The exception is a one-off that changes deploy configuration or database migrations: that ships to develop by its own pull request. Develop and Release cover both routes.
Use insert-story or insert-defect instead when the work belongs in a plan's chain.
Two rules keep a plan finishable.
Deferred work never sits under an active Epic. An Epic is released only when it has no open Stories left, so a "later" item parked under it means the Epic either never releases or gets released half-finished, and with develop reaching production within hours there is no time to tidy up in between. Deferred follow-ups, tech debt and postponed fixes go in the plan's deferred-work container instead:
[N] number. The loop never selects them, and they never count towards an Epic's remaining work. A person can still schedule one later, or build one by naming it./devstride:create-defect deferred I##### <the finding> files a review finding there, linked back to the item it was found against (I#####), and never builds it.Do not chase edge cases until they actually happen (the owner's rule). A review finding that needs an unlikely coincidence to occur, such as two people changing the same record within the same second, an input no caller produces, or a race that closes the moment either side saves, is dismissed with a one-line reason in the pull request or commit. It is not fixed "to be safe", and it is not filed as deferred work. File an item only when the problem has actually happened, or is both likely and important. Code written for imagined problems clutters the codebase and slows tests, development and deploys.
New scope that the plan genuinely needs is not deferred work at all. It goes into the chain with insert-story.
/devstride:comprehend-planBefore you change a plan you did not write, or when someone asks "where does this stand?", read it first:
/devstride:comprehend-plan I##### <an optional question>
It only reads. It goes through every item under the root, including descriptions and full comment threads (where decisions and notes on what actually shipped accumulate), and every dependency link. Then it reports:
Put a question after the item number to get a direct answer to it. It is a planning command for the session rule, so /clear before you go on to insert or build.
This example is invented to show the flow. The names, the questions and the answers are made up, and I##### stands for whatever number DevStride shows.
/devstride:plan I##### standard with its number. The skill finds nothing under it yet, says it is planning under standard because you asked, and asks its first batch: is there a design document; what must the first version do; must a weekly email export ship together with the download?Capability Board exports Delivery profile: standard
├─ Epic Download a board as CSV
│ ├─ Story [1] Export endpoint returns the board's visible items as CSV
│ └─ Story [2] Export button and download on the board toolbar (blocked by [1])
├─ Epic Weekly export by email
│ ├─ Story [3] Weekly export schedule in board settings (blocked by [1])
│ └─ Story [4] Send the scheduled export by email (blocked by [3])
└─ Epic Deferred defects (never selected)
[2] and [4] land on today, and stamps the numbers./clear, then /devstride:build-item (see Develop). After [1] has been built and merged, someone points out that exports must leave out archived items, which nobody planned. In the build session, /devstride:insert-story I##### leave archived items out of board exports, with the first Epic's number, splices a new Story in just before [2], numbered [1.1].[2] (the short review every Story gets before it merges) raises two things. One happens only if two people press Export within the same second; it is dismissed with a one-line reason. The other, that accented letters look garbled when the file is opened in Excel, is likely and matters, but the owner wants to ship without it. It is filed under Deferred defects with /devstride:create-defect deferred, linked back to [2], so the Epic can still finish./devstride:create-defect makes a one-off, which rides the support train to the next release.When [1.1] and [2] have merged onto the Epic's branch, the first Epic is release-ready (every Story finished, waiting to be released into develop), and Release takes it from there.
/clear and the same command again, or add --same-session to stay where you are./devstride:doctor; it names what is missing and the command that fixes it./devstride:rationalize-gantt stopped on a cycle. It wrote no dates. Fix or remove the link it names, then run it again from the top.Anything else: Troubleshooting.
Next: Develop, where you build the first item of your plan.
Credentials and access
Where every tool's key on a DevStride machine comes from, who creates and rotates it, how setup fetches the team's keys, and what a retired machine still holds.
Develop
From a READY machine to a story merged onto its target: take a checkout, start the item on the right branch, build and try it, check it locally, and land it.