chrisjainsley/claude-dotnet-workflow-kit

.NET 팀을 위한 예산 기반 계획-검토 전달 워크플로: 시작, 계획, 구현, 테스트, 검토, 다음 단계를 제공하며, Claude Artifacts로 계획 페이지와 검토 페이지를 만들고 하나의 프로필 파일로 맞추며 프롬프트 위에 실시간 진행률 표시줄을 보여 줍니다.
chrisjainsley/claude-dotnet-workflow-kit

.NET 팀을 위한 Claude Code 플러그인입니다. 티켓에서 계획, 구현, 검토, QA 인계까지 작업을 이어 줍니다. 단어 수 예산을 강제한 계획 페이지와 검토 페이지를 만들어 각 단계를 승인하기 전에 제안된 작업과 결과를 읽을 수 있습니다.
하나의 프로젝트 프로필로 아키텍처, 테스트, 추적기, QA 워크플로를 설정합니다. 6개 스킬 start, plan, implement, test, review, next를 함께 또는 각각 사용할 수 있으며 티켓 추적기나 Artifact 도구가 없어도 됩니다.
설치 | 워크플로 | 스킬 | 진행률 표시줄 | /goal | 브랜딩 | 프로필 참고 | dotnet-claude-kit | Jev | 기여
터미널에서 실행합니다.
claude plugin marketplace add chrisjainsley/claude-dotnet-workflow-kit
claude plugin install dotnet-workflow-kit@dotnet-workflow-kit
그런 다음 프로젝트에서 Claude Code로 설정을 실행합니다.
/dotnet-workflow-kit:setup
설정은 팀에 관해 질문하고 .claude/dotnet-workflow-kit.json에 씁니다. 이 파일을 커밋하면 설정을 공유할 수 있습니다. 워크플로가 바뀌면 설정을 다시 실행합니다.
스크립트에는 Python 3.11 이상이 필요합니다. Pillow는 선택 사항이며, 없으면 계획 빌더가 이미지를 축소하지 않고 원본 크기로 삽입합니다.
이 저장소를 클론한 디렉터리에서 터미널 설정을 하려면:
python scripts/setup.py
티켓 ID로 시작합니다. tracker가 none이면 짧은 slug를 사용할 수 있습니다.
/dotnet-workflow-kit:start 1234
파이프라인 드라이버로 계속 진행하거나 목표로 감싸 다음 게이트까지 계속 실행하게 합니다.
/dotnet-workflow-kit:next
/goal /next has stopped at a gate
드라이버는 브랜치, PR, 저장된 상태를 확인한 뒤 가장 이른 미완료 단계를 실행합니다. 계획 답변이나 승인, 검토 결정, 차단 항목에서 일시 중지합니다. 검토 체크포인트 전에는 호출만으로 커밋, 푸시, 초안 PR, 설정된 배포 라벨 적용이 승인됩니다. 이 키트는 병합하지 않으며 모든 병합은 사람이 승인합니다.
| 단계 | 담당 | 결과 | |---|---|---| | 0. 시작 | Agent | 브랜치를 만들고 푸시합니다. 추적기가 설정되어 있으면 항목을 할당하고 활성화합니다. | | 1. 계획 | Agent, 그 다음 당신 | 계획 페이지를 만듭니다. 열린 질문에 답하거나 승인합니다. | | 2. 구현 | Agent | 커밋마다 계획의 한 계층을 구현한 뒤 검토 스윕을 실행하고 발견 사항을 수정하고 검증합니다. | | 3. 테스트 | Agent | 스위트를 실행한 뒤 설정된 환경에서 계획의 시나리오를 실행합니다. 실패를 수정하고 다시 실행합니다. | | 4. 검토 | Agent, 그 다음 당신 | 최종 diff, 발견 사항, QA 증거를 한 페이지에 제시합니다. 승인하거나 돌려보냅니다. | | 5. Pull request | Agent, 그 다음 당신 | 스레드를 해결하고 검사를 통과시킵니다. 승인 후 QA 보고서를 게시하고 라벨을 적용해 PR을 준비 완료로 표시합니다. 병합은 당신이 합니다. |
변경을 요청하면 메모와 발견 사항별 수정 또는 수락 선택을 포함해 파이프라인이 구현 단계로 돌아갑니다. 승인할 때까지 초안은 초안으로 유지됩니다.
ID, 이슈 URL 또는 추적되지 않은 slug에서 작업을 시작할 때 사용합니다. branch_pattern을 사용해 base_branch에서 브랜치를 만들고 푸시합니다. 추적기가 있으면 항목을 user에게 할당하고 설정된 활성 상태로 옮깁니다. 지원되는 경우 세션 이름을 바꾼 뒤 plan으로 넘깁니다.
구현 계획에 사용합니다. 티켓과 코드베이스를 읽고 plans/<id>-<slug>/plan.md를 작성한 다음 plan.html을 만듭니다. 섹션은 아키텍처를 따르며 테스트 시나리오, 결정, 위험, 열린 질문을 포함합니다. 게시 전에 스크립트가 섹션 예산을 검사합니다.
stack.frontend가 설정되어 있고 티켓이 디자인 없이 제공된 화면을 변경하면 이 스킬은 먼저 화면을 그립니다. Claude Code의 /design 명령 또는 Design canvas Artifact 유형을 사용하고, 편집 가능한 캔버스 링크와 함께 계획 페이지의 Designs 섹션에 아트보드를 삽입합니다. 추적기가 제공한 디자인은 그대로 사용하며 캔버스는 만들지 않습니다.
Artifact 페이지에서 답변을 고르고 Approve 또는 Revise the plan을 선택한 뒤 Send answers를 누릅니다. 페이지는 선택을 세션에 전달하고 세션은 이를 계획에 반영합니다. Approve를 선택하면 바로 Implement로 진행합니다. 페이지에서 Claude에게 「decided」라고 말하라고 하면 세션에 연결하지 못한 것입니다. 채팅으로 그 말을 하면 스킬이 저장된 선택을 읽습니다.

승인된 계획을 구현할 때 사용합니다. 계획의 계층을 순서대로 한 커밋씩 처리하고, testing.tdd가 strict이면 먼저 테스트한 다음 검토 스윕을 실행합니다. 읽기 전용 검토자는 병렬로, 정리와 검증은 순서대로 실행합니다. 기본 검토자는 bug-hunt와 conventions이며 프로필에서 보조 검토자와 Codex의 두 번째 의견을 켤 수 있습니다. 테스트 전에 브랜치에서 발견 사항을 수정하고, 없는 도구는 이유와 함께 건너뛴 목록에 표시합니다. 이 스킬은 파일을 편집합니다.
Test 단계를 실행하고 테스트한 내용을 기록할 때 사용합니다. 빌드와 스위트를 실행한 다음 qa.environment에서 승인된 계획의 시나리오를 실행합니다. 환경에 배포가 필요하면 초안 PR을 열고 qa.deploy_label을 적용합니다. 이어서 QA 보고서 또는 QA 팀용 테스트 메모를 작성합니다.
| 모드 | 내용 | 게시 |
|---|---|---|
| Report | Given/When/Then 시나리오, Pass/Fail/Blocked 결과, 증거(API 요청과 응답 쌍, 각 단계가 증명하는 쿼리 결과, 시나리오별 화면과 동영상을 보이는 그리드에 배치), 요약, 테스트하지 않은 기준. | 승인 후 qa.evidence에 따라 게시합니다. |
| Notes | 변경 내용, 페르소나별 단계, 테스트 데이터, 예외 사례, 범위, 환경, 플래그. | 승인 후 qa.evidence에 따라 qa-team에 게시하고, 그렇지 않으면 채팅에 출력합니다. |
보고서는 실제 환경에 대한 인수 실행과 수동 확인을 다룹니다. 단위 및 통합 테스트 스위트는 QA 증거로 보지 않습니다. 메모는 승인된 계획의 Specs에서 가져오며 계획이 없으면 diff에서 가져옵니다. 다음으로 메모 모드를 선택합니다.
/dotnet-workflow-kit:test notes
브랜치나 PR을 검토할 때 사용합니다. 승인된 계획, 실제 diff, 스윕 발견 사항, QA 증거를 review.md와 review.html로 합칩니다. 브랜치에 최신 스윕이 없으면 먼저 실행하므로 이 세션에서 구현하지 않은 브랜치도 검토할 수 있습니다.
페이지에는 판정 수, 계획과 전달 결과의 비교, 변경 다이어그램(클릭하면 전체 크기로 열림), 전체 diff 파일 링크, 발견 사항, QA 보고서, 롤아웃 체크리스트가 포함됩니다. Approve 또는 Request changes를 고르고 Send decision을 누릅니다. 페이지는 결정을 세션에 전달하며 세션은 열린 발견 사항마다 수정 또는 수락 선택을 읽습니다. Approve면 바로 풀 리퀘스트 단계로 진행합니다. 페이지에서 요청하면 채팅으로 「decided」라고 말합니다.

현재 단계에서 워크플로를 실행할 때 사용합니다. ~/.claude/dotnet-workflow-kit/pipeline/<slug>.json과 함께 실시간 신호를 읽고 단계 완료를 갱신합니다. 실시간 증거가 저장된 상태보다 우선합니다. 새 커밋보다 오래된 스윕, 테스트 실행, 검토는 다시 실행해야 합니다. 0.5.0에서 작성된 상태 파일은 처음 읽을 때 마이그레이션됩니다.
단계를 실행하지 않고 진행 상황을 확인하려면:
/next status
이제 스킬은 실행하는 단계의 이름을 사용합니다. 예전 이름에는 별칭이 없으므로 저장된 프롬프트나 /goal 텍스트를 업데이트합니다.
| 이전 | 현재 |
|---|---|
| start-ticket | start |
| visual-plan | plan |
| next 내부의 Execute 단계와 mega-review | implement(스윕은 skills/review/sweep.md에 있음) |
| qa-report와 next 내부의 QA 단계 | test |
| visual-review | review |
| Draft PR, Resolve comments, Publish, hand off 단계 | next 단계 5, Pull request |
이 키트는 터미널과 데스크톱 Code 탭에서 프롬프트 위에 진행률 표시줄을 그리는 Claude Code mod를 제공합니다. 세션 자체 브랜치의 작업 항목을 보여 줍니다. 티켓 ID와 짧은 제목, 단계별 구간이 있는 표시줄, 현재 단계, 백분율, Claude가 지금 하는 일을 표시합니다. 당신을 기다리는 단계는 호박색이 됩니다. 표시줄은 start, plan, next가 쓰는 파이프라인 상태 파일을 읽습니다.
같은 저장소의 다른 브랜치에서 최근 하루 동안 수정된 항목은 표시줄 끝에 +N 칩으로 나타납니다. 그중 하나가 당신을 기다리면 호박색이 됩니다. 칩 또는 /sessions를 누르면 Sessions 창이 열리고 모든 항목이 Needs you, Running, Done으로 묶입니다. 열린 항목은 단계와 상태가 있는 카드이며, 열 세션의 브랜치를 알려 주는 Show 버튼이 있습니다. 보고 있는 항목에는 보라색 테두리가, 당신을 기다리는 항목에는 호박색 테두리가 생깁니다. 플러그인은 앱을 다른 세션으로 전환할 수 없으므로 Show는 그 위치를 알려 줍니다. 끝난 항목은 한 줄씩 표시되고 X로 하나를 숨기거나 Dismiss all로 모두 숨길 수 있습니다. 다른 항목이 게이트에 도달했을 때의 토스트는 기본적으로 꺼져 있습니다. 앱 자체 알림이 당신을 기다리는 세션을 이미 알려 주기 때문이며 창의 마지막 행에서 켤 수 있습니다. /progress로 표시줄을 숨기거나 보이고, 완료된 항목의 X로 숨깁니다.
풀 리퀘스트가 병합되거나 닫히거나, 시작된 워크트리가 사라지면 항목은 자동으로 닫힙니다. 워크트리 채팅을 보관하면 워크트리가 사라집니다. /progress done으로 현재 브랜치의 항목을 직접 닫을 수 있습니다. 닫힌 항목은 모든 단계가 완료된 것으로 표시되고 하루 뒤 행이 사라지며 scripts/close_items.py가 상태 파일을 삭제합니다. PR 검사는 열 분마다 gh(Azure Repos에서는 az)를 확인합니다.
플러그인을 설치하면 표시줄이 자동으로 켜집니다. 새 세션마다 mods가 로드되므로 활성화할 것이 없습니다. 작업 항목을 시작하기 전에는 비어 있습니다. 조직의 관리 설정은 사용자 설치 mods를 차단할 수 있으며, 예를 들면 allowManagedModsOnly가 있습니다.
/next는 한 턴 안에서 단계를 차례로 실행하지만 턴이 일찍 끝나면 다시 시작되지 않습니다. 키트의 hooks는 실행의 앞뒤 절반을 각각 목표로 감쌉니다.
| 시점 | hooks가 설정하는 값 |
|---|---|
| 계획이 승인됨 | /goal /next has reached the review checkpoint |
| 검토가 승인됨 | /goal complete /next: the pull request is ready |
각 목표는 해당 절반을 끝낸 /next의 메시지로 달성되므로 판단하는 동안 다시 프롬프트하지 않고 스스로 지워집니다. /next가 차단 항목에서 멈춘 동안 hooks는 답할 때까지 목표를 조용히 유지합니다. 계획 또는 검토 페이지에서 보내면 Send to Claude가 세션을 깨우고 승인 시 실행이 스스로 이어집니다. 페이지가 세션에 연결되지 않으면 그 사실을 보여 주며, 세션에 「decided」라고 말하면 됩니다.
function hooks가 없으면 각 게이트 뒤에 직접 목표를 설정합니다.
/goal /next has stopped at a gate
도구 권한 프롬프트에는 여전히 입력이 필요할 수 있습니다. 파이프라인이 차단 항목을 보고하면 해결한 뒤 계속합니다.
Artifact 도구를 사용할 수 없으면 설정에서 artifacts를 false로 지정합니다. 스킬은 같은 HTML 페이지를 만들고 열 수 있는 로컬 파일 경로를 제공합니다.
로컬 양식은 답변이나 결정을 저장할 수 없습니다. 질문 번호와 선택지를 채팅으로 답하거나 「approve」 또는 「changes」와 발견 사항 결정을 보내세요. 롤아웃 체크리스트의 체크는 유지되지 않으므로 키트 밖에서 롤아웃을 추적합니다. Artifact 도구 없이 실행하기를 참고하세요.
계획과 검토 페이지는 Delivery Labs의 색상을 사용하고 해당 사이트로 연결되는 저작자 표시 푸터를 포함합니다. 설정 또는 프로필 파일에서 branding을 false로 지정하면 푸터 없는 중립 팔레트로 표시됩니다.
설정은 프로젝트에 .claude/dotnet-workflow-kit.json을 씁니다. 프로필 해석은 명시적 경로, 프로젝트 파일, 사용자 파일 ~/.claude/dotnet-workflow-kit.json, 기본값 순서로 진행됩니다. 누락된 필드에는 기본값이 적용됩니다.
아래 각 행은 점으로 표시한 중첩 필드를 포함해 하나의 필드를 설명합니다. 예를 들어 testing.tdd는 i에 있습니다
먼저 작성자의 README에서 marketplace와 플러그인 이름을 확인하세요. 저장소 구조에 따라 명령어가 달라질 수 있습니다.
claude plugin marketplace add chrisjainsley/claude-dotnet-workflow-kit claude plugin install dotnet-workflow-kit
A Claude Code plugin for .NET teams that takes work from a ticket through planning, implementation, review and QA hand-off. It builds plan and review pages with enforced word budgets, so you can read the proposed work and the results before approving each.
One project profile sets your architecture, tests, tracker and QA workflow. Use the six skills, start, plan, implement, test, review and next, together or on their own, with or without a ticket tracker or the Artifact tool.
Install | Workflow | Skills | Progress bar | /goal | Branding | Profile reference | dotnet-claude-kit | Jev | Contributing
Run in a terminal:
claude plugin marketplace add chrisjainsley/claude-dotnet-workflow-kit
claude plugin install dotnet-workflow-kit@dotnet-workflow-kit
Then run setup in Claude Code from your project:
/dotnet-workflow-kit:setup
Setup asks about your team and writes .claude/dotnet-workflow-kit.json. Commit that
file to share the settings. Run setup again when your workflow changes.
The scripts require Python 3.11 or later. Pillow is optional; without it, the plan builder embeds full-size images instead of downscaling them.
For terminal setup from a clone of this repository:
python scripts/setup.py
Start with a ticket ID, or a short slug when tracker is none:
/dotnet-workflow-kit:start 1234
Use the pipeline driver to continue, or wrap it in a goal so it keeps going until the next gate:
/dotnet-workflow-kit:next
/goal /next has stopped at a gate
The driver checks the branch, PR and saved state, then runs the earliest unfinished stage. It pauses for plan answers or approval, the review decision, and blockers. Invoking it authorizes commits, pushes, a draft PR and configured deployment labels before the review checkpoint. The kit never merges; a person approves every merge.
| Stage | Who | Result | |---|---|---| | 0. Start | Agent | Create and push a branch; assign and activate the item when a tracker is configured. | | 1. Plan | Agent, then you | Build the plan page; you answer the open questions or approve. | | 2. Implement | Agent | Implement the plan one layer per commit, then run the reviewer sweep, fix findings and verify. | | 3. Test | Agent | Run the suites, then the plan's scenarios in the configured environment; fix failures and rerun. | | 4. Review | Agent, then you | Present the final diff, findings and QA evidence on one page; you approve or send it back. | | 5. Pull request | Agent, then you | Resolve threads and get checks green. After approval, post the QA report, apply labels and mark the PR ready. You merge. |
Requesting changes returns the pipeline to implementation with your notes and per-finding fix or accept choices. The draft stays a draft until approval.
Use to start work from an ID, issue URL or untracked slug. It creates and pushes a
branch from base_branch using branch_pattern. With a tracker, it assigns the item
to user and moves it to the configured active state. It then renames the session
when supported and hands off to plan.
Use for an implementation plan. It reads the ticket and codebase, then writes
plans/<id>-<slug>/plan.md and builds plan.html. Sections follow your architecture,
with test scenarios, decisions, risks and open questions. A script checks section
budgets before publication.
When stack.frontend is set and a ticket changes a screen that came with no design,
the skill draws the screens first, with Claude Code's /design command or the Design
canvas Artifact type, and embeds the artboards in a Designs section of the plan page
next to a link to the editable canvas. Designs supplied by the tracker are used as they
are and no canvas is made.
On an Artifact page, choose answers, pick Approve or Revise the plan and press Send answers. The page passes the choices to the session, which folds them into the plan; on Approve it goes straight on to Implement. If the page says to tell Claude "decided", the session could not be reached; say it in chat and the skill reads the stored choices.

Use to build an approved plan. It walks the plan's layers in order, one commit each,
tests first when testing.tdd is strict, then runs the reviewer sweep: read-only
reviewers in parallel, cleanup and verification in sequence. The built-in reviewers
are bug-hunt and conventions; the profile can enable companion reviewers and a
Codex second opinion. Findings are fixed on the branch before anything is tested, and
missing tools appear in the skipped list with a reason. This skill edits files.
Use to run the Test stage and write up what was tested. It runs the build and the
suites, then the approved plan's scenarios in qa.environment, opening the draft PR
and applying qa.deploy_label when that environment needs a deployment. It then writes
the QA report, or testing notes for a QA team.
| Mode | Content | Posting |
|---|---|---|
| Report | Given/When/Then scenarios, Pass/Fail/Blocked results, evidence (API request and response pairs, query results folded under the step each proves; screenshots and videos in a visible grid per scenario), summary and untested criteria. | After approval, post according to qa.evidence. |
| Notes | What changed, steps per persona, test data, edge cases, scope, environment and flags. | After approval, post for qa-team according to qa.evidence; otherwise print in chat. |
Reports cover acceptance runs against a real environment and manual checks. Unit and integration suites do not count as QA evidence. Notes come from the approved plan's Specs, or the diff when no plan exists. Select notes mode with:
/dotnet-workflow-kit:test notes
Use to review a branch or PR. It combines the approved plan, actual diff, sweep
findings and QA evidence into review.md and review.html. When no sweep is fresh
for the branch, it runs one first, so a branch nobody implemented in this session can
still be reviewed.
The page includes verdict counts, plan versus delivered, a change diagram (click it to open full size), file links to full diffs, findings, the QA report and a rollout checklist. Choose Approve or Request changes and press Send decision. The page passes the decision to the session, which reads it with each open finding's fix or accept choice; on Approve it goes straight on to the pull request stage. Say "decided" in chat if the page asks.

Use to run the workflow from the current stage. It reads live signals
alongside ~/.claude/dotnet-workflow-kit/pipeline/<slug>.json and updates stage completion.
Live evidence overrides saved state; sweeps, test runs and reviews older than new
commits must run again. State files written by 0.5.0 are migrated on first read.
To inspect progress without running a stage:
/next status
The skills now carry the names of the stages they run. Old names are not aliased;
update any saved prompts or /goal text.
| Before | Now |
|---|---|
| start-ticket | start |
| visual-plan | plan |
| Execute stage inside next, plus mega-review | implement (the sweep lives at skills/review/sweep.md) |
| qa-report, plus the QA stage inside next | test |
| visual-review | review |
| Draft PR, Resolve comments and Publish and hand off stages | next stage 5, Pull request |
The kit ships a Claude Code mod that draws a progress bar above the prompt, in the
terminal and the desktop Code tab. It shows the work item on the session's own branch:
the ticket id and a short title, a bar with a segment per stage, the current stage, the
percentage and what Claude is doing right now. A stage waiting on you turns amber. The
bar reads the pipeline state file that start, plan and next write.
Other items on branches of the same repository, touched in the last day, appear as a
+N chip at the end of the bar; it turns amber when one of them is waiting on you.
Pressing the chip, or /sessions, opens the Sessions pane: every item grouped as
Needs you, Running and Done. Open items are cards with their stages, status and a Show
button that names the branch whose session to open; the item you are viewing has a
purple edge and one waiting on you an amber one. A plugin cannot switch the app to
another session, so Show points you to it instead. Finished items take one line each,
with a cross to hide one and Dismiss all to hide the lot. A toast when another item
reaches a gate is off by default, because the app's own notifications already cover a
session waiting on you; the last row of the pane turns it on. /progress hides or
shows the bar, and the cross on a finished item hides it.
An item closes by itself when its pull request merges or closes, or when the worktree it
was started in is gone, as it is once a worktree chat is archived; /progress done
closes the current branch's item by hand. A closed item shows every stage done, and a
day later its row goes and scripts/close_items.py deletes its state file. The PR check
asks gh (or az for Azure Repos) every ten minutes.
The bar turns on by itself once the plugin is installed: mods load in every new session,
with nothing to enable. It stays empty until a work item is started. An organisation's
managed settings can block user-installed mods, for example with allowManagedModsOnly.
/next runs stage after stage inside one turn, but nothing restarts it if the turn
ends early. The kit's hooks wrap each half of the run in a goal for you:
| When | The hooks set |
|---|---|
| The plan is approved | /goal /next has reached the review checkpoint |
| The review is approved | /goal complete /next: the pull request is ready |
Each goal is met by the message /next ends that half with, so it clears on its own
instead of re-prompting while you decide. While /next is stopped on a blocker the
hooks keep the goal quiet until you answer. Sending from the plan or review page wakes
the session through Send to Claude, and an approval carries the run on by itself. When a
page cannot reach the session, it says so; tell the session "decided" instead.
Without function hooks, set a goal yourself after each gate:
/goal /next has stopped at a gate
Tool permission prompts may still require input. When the pipeline reports a blocker, resolve it before continuing.
Set artifacts to false through setup when the Artifact tool is unavailable.
The skills build the same HTML pages and give you local file paths to open.
Local forms cannot save answers or decisions. Reply in chat with question numbers and choices, or with "approve" or "changes" and your finding decisions. Rollout checklist ticks do not persist; track rollout outside the kit. See Running without the Artifact tool.
The plan and review pages use the Delivery Labs
colours and carry an attribution footer linking there. Set branding to false through
setup, or in the profile file, to render the neutral palette with no footer.
Setup writes .claude/dotnet-workflow-kit.json in the project. Profile resolution
uses an explicit path first, then the project file, then the user file at
~/.claude/dotnet-workflow-kit.json, then defaults. Missing fields receive defaults.
Each row below names a field, including nested fields in dotted form.
For example, testing.tdd lives inside the testing object. Empty strings appear as "".
| Field | Allowed values | Default | Purpose |
|---|---|---|---|
| schema | Integer | 1 | Profile schema version. |
| user | Free text | "" | Assignee and name used in page prose. |
| architecture | clean, vertical, ddd-clean, modular-monolith | "clean" | Plan section order and review rules. |
| testing.tdd | strict, encouraged, none | "encouraged" | TDD expectation; strict means tests first during execution. |
| testing.unit | xunit, nunit, mstest | "xunit" | Unit test framework. |
| testing.integration | webapplicationfactory, testcontainers, none | "webapplicationfactory" | Integration test approach. |
| testing.acceptance | reqnroll, specflow, none | "none" | Acceptance test runner; none keeps scenarios without a BDD runner. |
| qa.owner | qa-team, self, none | "self" | Who tests and signs off. |
| qa.evidence | work-item, pr-comment, none | "none" | Where approved QA reports go. |
| qa.handoff_label | Free text | "" | PR label for QA hand-off. |
| qa.deploy_label | Free text | "" | PR label to deploy to QA. |
| qa.environment | Free text | "local" | Environment named in QA evidence. |
| tracker | azure-boards, github-issues, jira, none | "none" | Ticket adapter; none uses your description. |
| tracker_project | Free text | "" | Project or organization identifier for tracker calls. |
| scm | github, azure-repos | "github" | PR and diff adapter. |
| base_branch | Free text | "main" | Starting branch and fallback PR base; stacked work uses its parent. |
| branch_pattern | Free text containing {slug}; supports {kind} and {id} | "{kind}/{id}-{slug}" | Branch naming template. |
| branch_kinds.feature | Non-empty text | "feat" | Feature value for the kind token. |
| branch_kinds.bug | Non-empty text | "bug" | Bug value for the kind token. |
| tracker_states.active | Free text | "" | State when work starts; blank uses the adapter default. |
| tracker_states.qa_ready | Free text | "" | QA hand-off state; blank uses the adapter default. |
| artifacts | true, false | true | Publish Artifacts, or build local HTML and take answers in chat. |
| branding | true, false | true | Delivery Labs colours and an attribution footer on the plan and review pages; false renders the neutral palette with no footer. |
| stack.data | ef-core, dapper, cosmos, other | "ef-core" | Data access conventions. |
| stack.api | minimal-api, controllers, graphql, grpc | "minimal-api" | API contract style. |
| stack.messaging | masstransit, wolverine, service-bus, none | "none" | Messaging conventions. |
| stack.errors | result, exceptions | "exceptions" | Error handling conventions. |
| stack.local_run | aspire, docker, plain | "plain" | How to start the system for local QA. |
| stack.frontend | none, blazor, razor, react, angular, vue, javascript | "none" | Whether the repo has a frontend and which kind; see the plan skill. |
| reviewers | bug-hunt, conventions, kit, security-scan, convention-learner, code-review-workflow | ["bug-hunt", "conventions"] | Reviewer sweep passes; the two built-ins always run. |
| pipeline.execute | Free text | "" | Execution command; blank implements the plan directly. |
| pipeline.resolve_comments | Free text | "" | Comment-resolution command; blank uses the SCM adapter. |
| pipeline.qa | Free text | "" | QA command; blank runs plan Specs manually per the QA adapter. |
| pipeline.open_pr_in_browser | true, false | true | In Claude desktop, open a newly created PR in the Claude browser pane. Set false to only report the link. |
| pipeline.auto_fix_pr | true, false | true | In Claude desktop, turn on CI auto-fix and comment handling for a newly created PR, so the session wakes on CI failures, conflicts and review comments. Set false to leave it off. |
| optional.dotnet-claude-kit | true, false | false | Companion plugin availability. |
| optional.codex | true, false | false | Enable the Codex second-opinion reviewer. |
| optional.roslyn-mcp | true, false | false | Roslyn MCP availability for code-review-workflow. |
| optional.jev | true, false | false | Jev availability: a TYPESAFE_API_KEY or a jev MCP server. Detected by setup. See Jev. |
| jev.flag_at | Number from 0 to 1 | 0.75 | Probability at or above which a scored check becomes a finding at the rule's severity. |
| jev.review_at | Number from 0 to 1, at most flag_at | 0.4 | Probability at or above which a scored check is listed as low with "confirm by reading". |
| checks | List of {id, rule, severity, files} | [] | Review checks the conventions reviewer enforces; files is an optional glob. Edited in the file, validated by scripts/doctor.py. |
| extra_stages | List of {id, label, after, run, done_when, gate} | [] | The team's own /next stages. after names a built-in stage other than pull_request, or an earlier extra stage; run is a slash command or an instruction; done_when is the yes/no question that marks it done; gate: true stops for you after it. label is at most 12 characters and shows on the progress bar. Edited in the file. |
| stage_checks | Object of stage name to a list of {id, prompt, on_fail} | {} | Yes/no prompts a /next stage must pass before it is marked done. Stages: start, plan, implement, test, review, pull_request. on_fail is fix (default, keep working the stage) or stop (blocker). Edited in the file. |
Validation requires a tracker when qa.evidence is work-item. Both bug-hunt and
conventions remain in the reviewer list.
The clean, ddd-clean and modular-monolith profiles share Domain, Application,
Infrastructure, API and Tests slices. Their adapters define different review rules.
The vertical profile uses Slice, Persistence, Integration, Endpoint and Tests.
See Adapters for supported tools and extension points.
Setup recommends the companion plugin when your answers need its skills, and asks
before installing it. These mappings come from scripts/kit_profile.py:
| Answer | dotnet-claude-kit skills it needs |
|---|---|
| architecture: clean | clean-architecture |
| architecture: ddd-clean | clean-architecture, ddd |
| architecture: vertical | vertical-slice |
| testing.tdd: strict | tdd |
| stack.data: ef-core | ef-core, migration-workflow |
| stack.api: minimal-api | minimal-api, openapi, api-versioning |
| stack.messaging: masstransit | messaging |
| stack.messaging: wolverine | messaging |
| stack.errors: result | error-handling |
| stack.local_run: aspire | aspire |
| reviewers: kit | code-review, 80-20-review, de-sloppify, verification-loop |
| reviewers: security-scan | security-scan |
| reviewers: convention-learner | convention-learner |
| reviewers: code-review-workflow | code-review-workflow (also needs a Roslyn MCP server) |
The workflow kit also runs without the companion. Built-in adapters still guide the
pages; unavailable companion reviewers are recorded as skipped. The
code-review-workflow reviewer also requires a Roslyn MCP server.
Jev is TypeSafe's
System One model: a fast, calibrated judge that returns probabilities, never text. With
optional.jev true the kit uses it wherever a skill would otherwise decide on gut feel,
and every call is skipped, never failed, when it is absent. Setup detects a
TYPESAFE_API_KEY or a jev MCP server. Register the MCP at user scope so it loads in
every project:
claude mcp add -s user jev -e TYPESAFE_API_KEY=<your key> -- npx -y @jkudish/jev-mcp
Add your own stage checks too. Each is a yes/no question a /next stage must answer yes to
before it is marked done, judged on that stage's evidence. Jev scores them when enabled, and
Claude answers them otherwise:
"stage_checks": {
"implement": [{"id": "migration-reviewed", "prompt": "Does every new EF Core migration have a matching Down method?"}],
"test": [{"id": "e2e-ran", "prompt": "Does the test output show the Playwright suite ran and passed?", "on_fail": "stop"}]
}
Add your own stages to the pipeline. /next runs each after the stage it names, and the
progress bar gets a segment for it:
"extra_stages": [
{"id": "security", "label": "Security", "after": "implement",
"run": "/dotnet-claude-kit:security-scan",
"done_when": "Did the scan report no high or critical findings?"}
]
Add your own review checks to the profile; the conventions reviewer enforces them on
every sweep, and with Jev scripts/jev_checks.py scores every added hunk against them
first:
"checks": [
{"id": "cancellation", "rule": "Every new async method that performs I/O accepts and forwards a CancellationToken", "severity": "high", "files": "**/*.cs"},
{"id": "clock", "rule": "Use the injected IClock, never DateTime.Now", "severity": "medium", "files": "src/**/*.cs"}
]
| Stage | What Jev does | |---|---| | start, plan | Screens ticket text and linked items for injected instructions; ranks linked items so only the relevant ones are read. | | plan | Settles open questions from the research facts, or preselects the recommended option and names the fact that would decide it. | | implement | Classifies open sweep findings as fixable in scope or scope-changing. | | sweep | Scores profile checks and the CLAUDE.md rubric per hunk; deduplicates findings; gates the verdict's claims against the diff and test output. | | test | Buckets failing tests as regression, refactor fallout, flaky or environment before fixing. | | review | Verifies Plan versus delivered rows, QA Pass evidence and Verdict tiles. | | next | Classifies red CI jobs; screens, classifies and ranks review threads. |
Diff hunks, claims, test output and ticket text are sent to api.typesafe.ai when a
touchpoint runs; files matching the secret patterns never are. Set optional.jev to
false when policy forbids it. docs/jev.md has the call shapes, the
skipped wording and the checks reference.
| Path | Contents |
|---|---|
| .claude-plugin/ | Plugin and marketplace manifests. |
| commands/setup.md | Setup command instructions. |
| skills/ | Six skills, the reviewer sweep and their supporting files. |
| adapters/ | Tracker, source control, architecture, QA and stack instructions. |
| assets/ | Shared page shell. |
| scripts/ | Profile, setup, checks, rendering and the Jev checks scorer. |
| docs/ | Usage guides, writing rules, the Jev reference and screenshots. |
| tests/ | Fixtures and automated checks. |
Run the tests and plugin validation from the repository root before opening a PR:
python -m pytest
claude plugin validate .
Keep examples generic. Hygiene tests check for private identifiers and em dashes. Follow the writing rules for plan and review content.
MIT. See LICENSE.
Author: Chris Ainsley