From hitl
Apply the HITL dev-practices workflow to analyze and plan a change before writing any code. Use when a developer is about to start implementing a feature, bug fix, or refactor and needs to produce an impact analysis, documentation plan, test plan, and execution order. Refuses to proceed if no GitHub issue exists.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hitl:dev-apply-change [change description or issue number][change description or issue number]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Before doing anything else:** Check whether `.hitl/` exists in the current directory. If it does not, stop immediately and output this — do not proceed with any steps:
Before doing anything else: Check whether .hitl/ exists in the current directory. If it does not, stop immediately and output this — do not proceed with any steps:
This project hasn't been set up for HITL.
To get started, run one of these commands in your project directory:
/hitl:dev-start-from-prd new project from a PRD
/hitl:dev-start-brownfield adopt HITL on an existing codebase
/hitl:dev-start-migration migrate a system
Input: $ARGUMENTS (description of the change — feature, bug fix, refactor, etc.)
Refusal rule: If no GitHub issue number is provided or discoverable in $ARGUMENTS, stop and say: "No GitHub issue found. Create one first with gh issue create, then re-run this skill with the issue number."
This skill is a design-phase skill. The challenge stance from ${CLAUDE_PLUGIN_ROOT}/shared/challenge-stance.md applies throughout — challenge vague requirements, surface tradeoffs, require evidence. In particular: if the issue has vague acceptance criteria, no supporting data, or unstated NFRs relevant to the affected domain, raise them at Step 1 before doing any analysis.
Before accepting the tier at face value, challenge it:
State the tier with justification. If the change should be split, say so and stop until the PM or developer confirms the scope.
Before any analysis, locate and confirm these exist:
docs/system-manifest.yaml is affectedIf the LLD does not exist for a Tier 2+ change, stop: "LLD is required before implementation. Run /hitl:dev-generate-docs first."
All work for this change must happen on a dedicated branch so that .hitl/current-change.yaml and every commit are isolated to this issue.
# Derive branch name from issue number and title
N=<issue-number>
TITLE=$(gh issue view $N --json title -q .title \
| tr '[:upper:]' '[:lower:]' \
| tr -cs 'a-z0-9' '-' \
| sed 's/^-//;s/-$//' \
| cut -c1-50)
BRANCH="issue/${N}-${TITLE}"
CURRENT=$(git branch --show-current)
$BRANCH: say "Already on branch $BRANCH — continuing." and proceed.git checkout "$BRANCH" and say "Switched to existing branch $BRANCH."git checkout -b "$BRANCH" and say "Created branch $BRANCH."After switching, write .hitl/current-change.yaml and commit it immediately so the file is
branch-tracked from the start. If /hitl:dev-start-change already seeded a development
workflow block, just advance it (steps 1–2 done, step 3 current). Otherwise write the full
v2 block, seeded from the catalog at ai/shared/workflows.yaml (workflow development):
schema_version: "2.0"
change_id: GH-<N>
tier: <from Step 1>
status: planning
expected_branch: "<this branch>"
workflow:
id: development
total: 31
steps:
- { n: 1, key: issue, label: "Issue", status: done }
- { n: 2, key: figma, label: "Figma", status: done }
- { n: 3, key: impact, label: "Impact", status: current }
- { n: 4, key: roi, label: "ROI", status: open }
# … remaining steps from ai/shared/workflows.yaml, all status: open
current_step:
number: 3
name: "Impact analysis"
phase: "Design"
Seed the full steps list from the catalog rather than hand-typing it. As each step below
completes, set its status: done and the next step's status: current, and update
current_step to match, so the breadcrumb advances.
git add .hitl/current-change.yaml
git commit -m "chore(hitl): initialize change context for GH-<N>"
This commit anchors the file to this branch. Every subsequent step that updates the file will produce a new commit (or the file will be amended into the next logical commit) — whichever keeps the branch diff clean.
Identify and list:
Search the codebase to verify each item. Don't guess — read the files.
If backwards-incompatible changes are identified, flag them explicitly in the summary and do not proceed to planning without a compatibility strategy.
Based on the impact analysis, identify which docs need updating:
Produce a concrete test plan:
If infrastructure is affected:
Create or update .hitl/current-change.yaml using the schema at docs/changes/change-context.schema.yaml. See docs/changes/GH-000-example.yaml for a filled-in example.
Set from the impact analysis above:
change_id: GH-<issue-number>tier: from Step 3status: planningsource_artifacts.issue: GitHub issue URL; set hld and lld to paths if known, or "pending"manifest.domain: affected domain nameallowed_paths: source paths for this domainapprovals.product and approvals.architecture: both pendingcurrent_step: {number: 3, name: "Impact analysis", phase: "Design"}Ask the user to confirm the HITL context file before proceeding.
Present the full plan in this format:
## Change: [one-line description]
## Source: [issue URL] | Tier: [N]
### Impact
- Endpoints: [list]
- Services: [list]
- Infrastructure: [list or "none"]
- Documentation: [list of files]
### Documentation Changes
- [file]: [what to change]
### Test Plan
| Action | Test File | Test Name | What it Covers |
|--------|-----------|-----------|----------------|
| ADD | ... | ... | ... |
| UPDATE | ... | ... | ... |
| REMOVE | ... | ... | ... |
| VERIFY | ... | ... | ... |
### IaC Changes
- [file]: [what to change] (or "No IaC changes needed")
### Execution Order
1. Update docs: [list]
2. Update IaC: [list]
3. Code changes: [list]
4. Test changes: [list]
5. Run test suite
6. Reconcile docs if needed
Wait for user approval before proceeding to implementation.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub pappar/hitl-claude-plugin --plugin hitl