Product Requirements as Code — An open-source toolkit that turns your GitHub repository into a self-managing autonomous development system.
PRaC Kit gives any repository a closed-loop pipeline: you write a user Story in markdown, an AI generates the implementation contract (Blueprint), another AI writes tests-first code, and a third AI reviews and merges the PR — all triggered by a git push.
When Jules gets stuck and asks a question, the Question Responder uses repo context to auto-answer with high confidence or escalates to a human — keeping the autonomous loop moving.
Human writes Story → Orchestrator generates Blueprint PR → Jules writes tests →
Jules implements → Automated Reviewer merges or sends feedback → Next task triggers
The system is built on three invariants:
- Blueprint is the contract. No code is written without a
BLUEPRINT.mdentry. - Tests before code. Agents write failing tests first (Test-Driven Autonomy).
- Docs as code. Requirements live entirely in the repository, not in external tools.
# Initialize PRaC in your repository
npx prac-kit init
# Configure your repo-specific values interactively
npx prac-kit config
# Create your first epic
npx prac-kit epic create my-feature
# Validate your setup
npx prac-kit doctoryour-repo/
├── prac.config.js ← repo-specific configuration
├── scripts/
│ ├── shared.js ← shared utilities (config-driven)
│ ├── orchestrate-story.js ← Story → Blueprint translation via Gemini
│ ├── review-pr.js ← LLM-powered automated PR reviewer
│ ├── trigger-jules.js ← Jules REST API trigger
│ ├── kickoff-sprint.js ← priority cascade kickoff
│ ├── on-blueprint-merge.js ← post-merge Linear issue creation
│ └── create-linear-cascade.js ← batch Linear issue creation
├── .github/workflows/
│ ├── orchestrator.yml ← detects Story changes on push
│ ├── reviewer.yml ← reviews Jules PRs automatically
│ ├── blueprint-merged.yml ← triggers Jules after Blueprint merge
│ ├── question-responder.yml ← auto-answers Jules' blocking questions
│ └── nightly.yml ← nightly test suite with self-healing
└── epics/
└── STORY_TEMPLATE.md ← template for new user stories
| Command | Description |
|---|---|
prac init |
Initialize PRaC in the current repository |
prac config |
Interactive walkthrough to set up prac.config.js |
prac update |
Update scripts and workflows to latest version |
prac epic create <name> |
Scaffold a new epic directory |
prac doctor |
Validate configuration and report drift |
All repo-specific values live in prac.config.js:
module.exports = {
repo: 'your-org/your-repo',
linearTeamKey: 'YOUR',
linearTeamId: 'uuid-from-linear',
projectName: 'Your Project',
orchestratorModel: 'gemini-3-pro-preview',
reviewerModel: 'gemini-3-flash-preview',
autoMergeBlueprints: true,
maxReviewerRevisions: 3,
cascadeEnabled: true,
// ... see prac.config.example.js for all options
};- Node.js 20+
- GitHub CLI (
gh) authenticated - API keys in
.envand GitHub repository secrets:LINEAR_API_KEY— Linear APIJULES_API_KEY— Jules APIGEMINI_API_KEY— Google AI Studio
- Operational Guide — How the autonomous loop works day-to-day
- Configuration Reference — All configurable values with documentation
- Changelog — Version history
We welcome contributions! Please read our Contributing Guide and Code of Conduct before submitting a pull request.
To report a security vulnerability, please see our Security Policy.
Copyright 2026 YDAX, Inc.
Licensed under the Apache License, Version 2.0. See LICENSE for the full text.