AI writes code fast. Too fast.
Without a spec, AI coding tools drift. Requirements get lost. Nobody can trace which code maps to which decision. SDD gives every AI action aΒ why β and Conduct enforces it automatically.
No account needed to generate a spec.
The problem
AI coding tools write code.
They don't know why.
The faster AI writes, the faster requirements drift. By the time you notice, the code doesn't match the intent β and there's no audit trail to explain what happened.
AI drift
The AI interprets your prompt, not your requirements. Each session it starts fresh β no memory of what FR-001 actually meant last week.
No traceability
Which lines of code map to which decision? Nobody knows. A refactor breaks something β but nothing links the broken code back to a requirement.
Compliance gap
SOC 2, ISO 27001, and internal audits ask: how do you know your software does what it's supposed to? You can't answer that without a spec.
The principle
SPEC.md is the contract.
Every requirement gets a number. Every line of code traces back to one. The spec lives in your repo β git-versioned, human-readable, owned by your team. Conduct never owns your spec. It just enforces it.
# Project Spec Β· v1.0
## Functional Requirements
FR-001 User can log in with SSO
Acceptance: SSO flow completes in <3s Β· session expires after 8h
FR-002 Session expires after 8 hours of inactivity
Acceptance: idle session redirects to login Β· active session unaffected
FR-003 Admin can revoke any active session
Acceptance: revoked session logs out within 60s Β· audit log records action
## Non-Functional Requirements
NFR-001 API response time <200ms at p99
...
Atomic
One behaviour per requirement
Testable
Clear pass/fail acceptance criteria
Traceable
PR can reference it unambiguously
The workflow
From idea to shipped code β with full traceability.
Six playbooks. One continuous workflow. Each step feeds the next.
sdd-spec-genFree Β· No loginDescribe β SPEC.md
Paste a description, Notion doc, Confluence page, or GitHub Epic. The agent asks 2β3 targeted questions to fill gaps, then writes a structured SPEC.md with numbered, testable FR-xxx requirements.
sdd-bootstrapRequires accountSPEC.md β Full repo scaffold
Reads your SPEC.md and commits 6 files in one push: AGENTS.md, DESIGN.md, PLAN.md, SPRINT.md, CLAUDE.md, and .conduct/spec-index.json β the machine-readable FR index that powers everything downstream.
sdd-featurePer featureFR β failing tests β code β PR
For each feature: reads the relevant FRs, writes failing tests first, writes code that makes them pass, runs a spec gate (every changed line must trace to a FR), then opens a PR with a spec compliance summary.
sdd-spec-to-issuesGitHub Β· Jira Β· LinearFR list β Epics + Stories
Pushes every FR as a Story under the right Epic into your tracker. FR numbers become the connective tissue: the same number appears in SPEC.md, the Jira ticket, the test comment, the commit, and the PR title.
sdd-spec-indexOn every pushKeep spec-index.json in sync
Runs automatically on every push. Regenerates the machine-readable FR index when SPEC.md changes. Keeps tracker issue URLs, status, and file mappings current without manual intervention.
sdd-drift-checkWeeklySurface untraced code + unimplemented FRs
Weekly scan: finds source files with no FR reference and FRs with no code yet. Surfaces both as a Slack report. The spec and the codebase stay honest.
Try it free
Generate your SPEC.md.
No account needed. Describe what you're building β get a structured spec in ~20 seconds.
Notion, Confluence, GitHub Epic β agent extracts and normalises
The moat
The only platform where AI can't ship
code that isn't in the spec.
Notion stores requirements. Jira tracks tickets. Linear manages sprints. None of them prevent AI from writing code with no requirement behind it. Conduct does β at the git hook level.
Without Conduct
# git push β no checks
modified: src/auth/session.ts
modified: src/auth/sso.ts
β pushed to main
# No one knows which requirement
# these files implement
With Conduct SDD
# git push β hook runs
modified: src/auth/session.ts
β no FR reference found
hint: add [FR-002] to commit msg
# Add FR reference, push again
modified: src/auth/session.ts
β FR-002 Β· FR-003 verified
β pushed to main
The pre-merge hook lives in .conduct/hooks/pre-merge β git-native, no external service required to enforce. If a team leaves Conduct, their spec and traceability data stay in the repo.
Tracker sync
FR numbers connect everything.
One number traces a requirement from SPEC.md through Jira, the test file, the commit, and the PR. Sync with GitHub, Jira, or Linear β bidirectionally.
# SPEC.md
FR-001 User can log in with SSO
# Jira / Linear / GH
[FR-001] User can log in with SSO
# Test file
# FR-001 def test_sso_login():
# Git commit
feat(auth): SSO login [FR-001]
# PR title
feat(auth): SSO [FR-001] closes #42
# SPRINT.md
FR-001 β done (merged Jun 8)
Common question
Why not just ask Claude or ChatGPT?
You can. But you get a markdown blob in a chat window.
Claude / ChatGPT
- βSpec lives in a chat thread
- βNo FR numbers β just prose
- βNothing enforced at commit time
- βDisconnected from your repo and tickets
- βAgents ignore it the next day
Conduct SDD
- βSPEC.md committed to git β versioned forever
- βFR-xxx numbers in every commit, PR, and test
- βPre-commit hook blocks unlinked code
- βOne command syncs FRs to Jira / Linear / GitHub
- βAGENTS.md makes every AI agent spec-aware
Chat β markdown.Β Β Conduct β enforced architecture.
Why not just use Notion?
Storing requirements isn't enforcing them.
Notion / Confluence / Jira
Conduct SDD
Write structured requirements
Manual
Generated + quality-checked
Requirements in version control
No
Yes β SPEC.md in git
FR numbers in code
Convention only
Enforced by hook
Block PR with no spec reference
No
Yes
Sync FRs to Jira / Linear
Manual copy-paste
Automated bidirectional
Detect spec drift weekly
No
Yes β sdd-drift-check
AI agents respect requirements
No
Yes β AGENTS.md + gate
Get started
Start with a spec. Ship with confidence.
Generate your SPEC.md free β no account needed. Then run the full SDD workflow inside Conduct to scaffold, enforce, and ship spec-compliant code.
