Open source · MIT Cursor · Claude Code · Codex Jira or Linear · GitLab or GitHub
Your AI agent says it's done. Make it prove it.
sdlc-kit takes a Jira or Linear ticket to a reviewed merge request on GitLab or GitHub. The agent plans before it codes, writes failing tests first, and can't say "done" until real check scripts agree.
git clone https://github.com/aniketshukla1/sdlc-kit.git
- 16 skills
- 14 hook rules
- 98 self-tests
01Why it works
Five shortcuts the agent can't take
The kit doesn't ask the model to be careful. It makes being careful the only way through.
-
The agent says:
I'll start coding.
No code before a plan you approve
Vertical-slice tasks, edge and abuse cases, and the exact expected result of every test. You type
approve. No code before that. -
The agent says:
The tests pass.
Tests come first, and they fail first
Every task starts with tests that fail. Then the code makes them pass. A test that passes before its code exists is rejected.
-
The agent says:
Looks done to me.
check_all.shdecidesLint, types, tests, changed-line coverage, migrations and 11 kinds of guards, run on the diff. The model doesn't get a vote, and the MR shows the verdict for its exact commit.
-
The agent says:
I'll just force-push.
A hook says no before it runs
No force push, no merge, no wiping your uncommitted work, no remote servers. A command hook denies those commands before they run.
-
The agent says:
Merged it for you.
It never merges
It opens the MR, answers review threads and fixes failed jobs. You review. You merge. Always.
02How it works
Sized to the ticket
The ticket's type picks the track, so small tickets stay small (on Linear, a Bug label or a sub-issue). Every chat starts from PROGRESS.md, so Continue PROJ-123 picks up exactly where the last one stopped.
A failing test reproduces the bug, the agent finds the root cause and checks every caller, you approve a ten-line plan, then it fixes, checks and opens the MR.
- 1
Reproduce
A failing test shows the bug
- 2
Root cause
Found, every caller checked
Plan
You approve ten lines (human gate)
- 4
Fix
The failing test goes green
- 5
Check
ALL PASS - 6
MR
Opened, same chat
You merge
Always you (human gate)
Intake, explore, plan, your approval, red then green per task, checks, self-review, MR.
- 1
Intake
Given / When / Then, no open BLOCKER
- 2
Explore
Pattern to copy, test setup, size limits
Plan
You type
approve(human gate)- 4
Build
Tests red, then code green, per task
- 5
Check
Only
ALL PASScounts - 6
Self-review
Fresh chat, five axes
- 7
MR
Opened, linked on the ticket
- 8
Feedback
Pipeline green, threads handled
You merge
Protected branches (human gate)
One roadmap for all of the sub-tasks, approved once; then each sub-task gets its own branch and MR, in dependency order.
- 1
Intake
The ticket and every sub-task
- 2
Roadmap
One plan for all of them
Approve once
The whole roadmap (human gate)
- 4
Sub-tasks
One branch and MR each, in dependency order
- 5
Small ones
Three plan tasks or fewer: one chat
You merge
Each MR, one by one (human gate)
Amber steps are human gates: the agent stops and waits for you.
03See it run
Watch it catch a cheat
The agent claims it's done. The tests start red, the checks catch a debug print, the hook blocks a force push. Real kit output.
04Guardrails
Every guardrail is a script or a hook
Except the two gates that stay human.
- The plan is approved before any codeyou type
approve - Nothing merges without youprotected branches
No debug code, ignore comments,
check_guards.shany, skipped or removed tests, secrets, stubs or swallowed errorsNo edits to
check_guards.sh + human exceptions.env*, production compose, CI config, search mappings or lint/test configOnly the files in the approved plan change
check_scope.shLint, types and the full test suite pass
check_backend.sh · check_frontend.shMigrations reverse cleanly, one head, no drift; never edit one already on
check_migration.sh · check_guards.shmainTests and migrations only touch a local database
db_guard.shFiles ≤ 200 lines, React components ≤ 150
check_size.shNo force push, merge,
command hook · block_commands.pyreset --hard,sshorkubectl; network only to localhostThe MR carries its proof:
proof_pack.shALL PASSon exactly the commit under review, the logged red lines, the changed filesAt least 90% of the changed production lines run in the tests; lowering the minimum needs a human
check_coverage.sh
The same guards catch deleted or skipped tests, weakened lint and test config, secrets, edits to migrations already on main, stubs left over from test-first, and swallowed errors.
05What's inside
16 skills, one short checklist each
Long instructions make cheaper models skip steps. Each skill loads only in its phase, and each standards file only when a matching file is edited.
Plan phases 1–3
- ticket-intake
- The ticket and its sub-tasks as Given / When / Then; questions batched as BLOCKERs.
- codebase-explore
- Finds the pattern to copy, the test setup and the files near the size limit.
- implementation-plan
- Vertical slices, abuse cases, exact expected results. Stops for
approve.
Build, test first phase 4
- write-tests
- Writes each task's tests before its code and shows them failing.
- db-migration
- Model and Alembic migration with an up → down → up round trip.
- backend-implement
- FastAPI route → service → repository until the red tests pass.
- frontend-implement
- React + TypeScript + shadcn/ui with loading, empty, error and success states.
Check and ship phases 5–8
- run-checks
- One command, one verdict: ALL PASS or FAIL.
- self-review
- Reviews the diff in a fresh chat on five axes.
- gitlab-mr
- Explicit
git add, typed commits, the MR from a template with a Proof section. - mr-feedback
- Fixes failed jobs, handles open threads, merges main on conflicts.
Shortcuts and teammates any time
- quick-fix
- The whole quick track in one chat.
- chat
- No ticket? A request typed in chat becomes a local ticket with testable criteria, then the normal track.
- jira-create
- A detailed Jira or Linear ticket from one sentence, using your team's templates.
- mr-review
- Reviews any MR against its ticket; posts labelled threads only after you type
post. - ticket-qa
- A pass/fail QA plan from the acceptance criteria, with evidence.
06Proof
Tested like production code
The checks are what make the kit trustworthy, so they're tested too. Read a recorded run on a sample repo.
- 98
Self-tests
The real scripts run in throwaway git repos against every bypass we know. Each new case was first proven to fail against the old script.
- 7
Holes found, all fixed
The first version printed ALL PASS on bad changes in 7 ways. Read the audit
- 25
Skills reviewed
Every one of Addy Osmani's agent-skills compared with the kit. Read the review
- 14
Hook rules
Risky commands are denied before they run, not flagged after.
07Quick start
Five minutes to your first ticket
You need Cursor, Claude Code or Codex, GitLab with glab or GitHub with gh, a Jira or Linear MCP server, git, python3 and ripgrep. The standards target FastAPI + React; other stacks mostly mean editing paths.
-
Install it into your repo
It never overwrites your files, adds Claude Code or Codex when your repo uses them, and ends with a checklist. Linear: add
--tracker linear.git clone https://github.com/aniketshukla1/sdlc-kit.git bash sdlc-kit/install.sh path/to/your-repo --key PROJ -
Connect your tools
Run
glab auth loginorgh auth login, and add your Jira or Linear MCP server to your agent. The kit reads GitLab or GitHub from youroriginremote. -
Trust the workspace
Trust it when your agent asks, then prove the hook works: ask the agent to run
git push --force --dry-run. It must be blocked. Codex has no hook yet; your protected branches are its gate. -
Commit the kit
Through a normal MR. Rerun the checklist any time:
bash .cursor/skills/run-checks/scripts/doctor.sh -
Start a ticket
In your agent's chat:
Start ticket PROJ-123. Follow the ticket workflow rule.
08FAQ
Questions people ask
Something else? Open an issue.
Will the agent ever merge, deploy or touch production?
No. The hook denies merge, approve and force push, and blocks kubectl, ssh, p4, and network tools aimed at anything but localhost. The database checks refuse any host that isn't local, and protected branches stay the final gate.
Does it burn a lot of tokens?
Less than one big prompt. A bug is one chat. Skills load only in their phase and standards only for matching files, so the context stays small where the work is small.
Does it work with Claude Code, Codex or Copilot?
Cursor, Claude Code and Codex are supported. Claude Code gets the same rules, the 16 skills as slash commands and the same command hook. Codex reads AGENTS.md and the skills; it has no command hook yet, so your protected branches are its gate. Other agents can follow AGENTS.md: everything is plain Markdown and shell.
Do I need Jira or Linear?
No. Type the request with /chat: it drafts a local ticket with testable acceptance criteria and a CHAT-<n> key, you type start, and the same tracks, tests and checks run. The MR quotes the request, so reviewers still see what was asked.
GitHub instead of GitLab? Linear instead of Jira?
GitHub works: the kit reads the host from your origin remote and does every MR step through gh, with pull requests, checks and review threads. Linear works too: write linear in .agent/tracker.txt; a Bug label or a sub-issue takes the quick track.
My stack isn't FastAPI + React.
The workflow, tracks, hook and guards are stack-agnostic. Point the standards files and the backend and frontend check scripts at your own linters and test runners.
It never merges. You do.
Ticket in. Reviewed MR out. Scripts decide when it's done.
git clone https://github.com/aniketshukla1/sdlc-kit.git