Transform your product requirements into working softwareβautomatically.
Sprinty orchestrates AI agents to execute the complete software development lifecycle, from requirements to delivery, using structured agile sprint cycles.
Quick Start β’ Features β’ Documentation β’ Examples
Sprinty is an autonomous agile development system that manages multi-agent collaboration through sprint-based workflows. It automates the entire development process by coordinating three specialized AI agents:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Sprint 0: Initialization β
β ββ Product Owner parses PRD & creates prioritized backlog β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Sprint 1-N: Iterative Development β
β β
β π Planning β PO selects tasks for sprint β
β π» Development β Developer implements with tests β
β π§ͺ QA β QA verifies acceptance criteria β
β β
Review β PO accepts/rejects work β
β β
β Loop continues until all tasks done or max sprints reached β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
Three specialized AI agents work together:
|
|
|
Bash bash --version
# >= 4.0 |
jq sudo apt install jq
# JSON processor |
AI Agent CLI # Option 1: Cursor Agent (Recommended)
curl https://cursor.com/install -fsS | bash
# Option 2: OpenCode (Free Alternative)
curl -fsSL https://opencode.ai/install | bash |
Apptainer (optional) sudo apt install apptainer
# Recommended! |
π‘ Note: Sprinty supports multiple AI agent backends. By default, it uses Cursor-Agent with the
opus-4.5-thinkingmodel. You can switch to OpenCode or other backends by modifying the configuration.
# Clone the repository
git clone https://github.com/your-username/sprinty.git
cd sprinty
# Run the installer
./install.sh
# Or install manually
chmod +x sprinty.sh
ln -s "$(pwd)/sprinty.sh" /usr/local/bin/sprinty# 1οΈβ£ Navigate to your project directory
cd /path/to/your/project
# 2οΈβ£ Initialize with your PRD
sprinty init my-awesome-app --prd docs/requirements.md
# 3οΈβ£ Run in container sandbox with live monitoring
sprinty --container --workspace . --monitor runThat's it! Sprinty will now:
- β Parse your PRD and create a backlog
- β Plan sprints automatically
- β Implement features with tests
- β Run QA verification
- β Show real-time progress in the dashboard
The --monitor flag launches a split-screen tmux dashboard:
ββββββββββββββββββββββββββββββββββββββββ
β Top: Real-time Status & Metrics β β Live updates every 5s
β βββββββββββββββββββββββββββββββββββββββ£
β Bottom: Agent Activity & Logs β β See AI agents working
ββββββββββββββββββββββββββββββββββββββββ
Press Ctrl+B then D to detach, tmux attach to reattach anytime!
Running with --container --workspace . is strongly recommended:
| Benefit | Without Container | With Container |
|---|---|---|
| Host Protection | β Agents can modify anything | β Isolated sandbox |
| Package Installation | β Requires manual setup | β Agents install as needed |
| File Operations | β Safe in container | |
| Cleanup | π§Ή Manual | β Auto-reset on restart |
| Project Files | β Accessible | β
Mounted at /workspace |
# First run: builds cached container (2-3 min, one-time)
sprinty --container --workspace . run
# β "Building cached container (one-time setup)..."
# Subsequent runs: instant startup!
sprinty --container --workspace . run
# β "Using cached container: ~/.local/share/sprinty/containers/ubuntu_24.04.sif"π‘ Tip: Pre-build the cache to avoid waiting:
sprinty container build
# Create PRD
cat > PRD.md << 'EOF'
# Todo Application
Build a CLI todo app with:
- Add/remove/list tasks
- Mark tasks complete
- Save to JSON file
- Unit tests required
EOF
# Initialize & run
sprinty init todo-app --prd PRD.md
sprinty --container --workspace . --monitor run
# Check progress
sprinty status
sprinty backlog list# Use Python 3.12 container
sprinty init ml-project --prd requirements.md
sprinty --container python:3.12 --workspace . --monitor run# Check detailed status
sprinty status
# View metrics & burndown
sprinty metrics
# List all backlog items
sprinty backlog list
# Add new task mid-sprint
sprinty backlog add "Fix critical bug" --type bug --priority 1 --points 2# Navigate to your project directory first
cd /path/to/your/project
# Initialize with PRD
sprinty init <project-name> --prd <prd-file>
# Example
sprinty init shopping-cart --prd specs/PRD.md
# Full-featured execution
sprinty --container --workspace . --monitor runWhat happens:
|
# Check status anytime
sprinty status
# Exit code 20 if done
sprinty status --check-done
# View metrics
sprinty metrics |
# Custom Ubuntu version
sprinty --container ubuntu:22.04 --workspace . run
# Python environment
sprinty --container python:3.12 --workspace ~/project --monitor run
# Node.js environment
sprinty --container node:20 --workspace . run
# Without container (β οΈ use with caution)
sprinty --monitor runFlag Reference:
| Flag | Description |
|---|---|
--container [image] |
Run in Apptainer sandbox (default: ubuntu:24.04) |
--workspace <path> |
Mount this directory as /workspace in container |
--monitor or -m |
Launch real-time tmux dashboard |
Running Sprinty in a container sandbox provides isolation and safety:
|
Apptainer (formerly Singularity) # Ubuntu/Debian
sudo apt install apptainer
# Fedora/RHEL
sudo dnf install apptainer
# Arch Linux
yay -S apptainer |
The first container run builds a cached image with pre-installed packages. Subsequent runs start instantly!
# First run: builds cache (2-3 minutes, one-time only)
$ sprinty --container --workspace . run
β Building cached container (one-time setup)...
β Installing: curl, git, jq, python3, pip, build-essential...
β Cache saved: ~/.local/share/sprinty/containers/ubuntu_24.04.sif
# Subsequent runs: instant startup!
$ sprinty --container --workspace . run
β Using cached container: ubuntu_24.04.sif
β Starting sprint...# Pre-build cache (skip waiting on first run)
sprinty container build # Default: ubuntu:24.04
sprinty container build python:3.12 # Python environment
sprinty container build node:20 # Node.js environment
# List all cached containers
sprinty container list
# Output:
# Cached containers in: ~/.local/share/sprinty/containers
# β’ ubuntu_24.04.sif (450M) - 2026-01-06 12:00:00
# β’ python_3.12.sif (520M) - 2026-01-06 12:05:00
# Total: 2 container(s)
# Clear cache (rebuild with updates)
sprinty container clear- System: curl, git, jq, tmux
- Python: python3, pip, venv
- Build tools: build-essential, gcc, make
- Locale: en_US.UTF-8 (proper Unicode support)
π Cache location:
~/.local/share/sprinty/containers/
Manage your project backlog with full CRUD operations:
# List all items (shows in terminal dashboard)
sprinty backlog list
# Add new item
sprinty backlog add "Implement user authentication" \
--type feature \
--priority 1 \
--points 8
# Show summary statistics
sprinty backlog summaryAvailable Options:
| Option | Values | Default | Description |
|---|---|---|---|
--type |
feature, bug, spike, infra, chore |
feature |
Type of work |
--priority |
1-5 |
1 |
Lower = higher priority |
--points |
Story points | 3 |
Effort estimation |
Task Types Explained:
- feature - New functionality
- bug - Defect fix
- spike - Research/investigation
- infra - Infrastructure/tooling
- chore - Maintenance work
Track your project's progress with comprehensive metrics:
# Full metrics dashboard
sprinty metricsWhat You'll See:
|
|
Example Output:
# Build cached container (speeds up first run)
sprinty container build # Default: ubuntu:24.04
sprinty container build python:3.12 # Python environment
sprinty container build node:20 # Node.js environment
# List all cached containers with sizes and dates
sprinty container list
# Clear all cached containers (free disk space)
sprinty container clear# Reset circuit breaker (if halted unexpectedly)
sprinty --reset-circuit
# Reset rate limiter (if hitting API limits)
sprinty --reset-rate-limit
# Rebuild container cache (if corrupt or outdated)
sprinty container clear
sprinty container build
# Show help and all available commands
sprinty --help
# Show version information
sprinty --versionCommon Issues:
| Problem | Solution |
|---|---|
| Circuit breaker halted | sprinty --reset-circuit |
| Rate limit reached | Wait for reset or sprinty --reset-rate-limit |
| Container won't start | sprinty container clear && sprinty container build |
| Agent stuck in loop | Check logs in logs/agent_output/ |
| Stale backlog | Manually edit backlog.json |
| Agent connection failures | Increase CURSOR_AGENT_MAX_RETRIES=5 and CURSOR_AGENT_RETRY_DELAY=30 |
| Agent crashes silently | Check logs, Sprinty auto-retries transient failures |
After initialization, Sprinty creates this structure in your project:
my-project/
βββ .sprinty/ # βοΈ Sprinty state (auto-created)
β βββ config.json # Project configuration
β βββ sprint_state.json # Current sprint state
β βββ status.json # Execution status
β
βββ backlog.json # π Product backlog
β
βββ sprints/ # π Sprint plans (auto-created)
β βββ sprint_1_plan.md
β βββ sprint_2_plan.md
β βββ ...
β
βββ reviews/ # β
Sprint reviews (auto-created)
β βββ sprint_1_review.md
β βββ sprint_2_review.md
β βββ ...
β
βββ logs/ # π Execution logs
β βββ agent_output/
β βββ product_owner.log
β βββ developer.log
β βββ qa.log
β
βββ specs/ # π Your documentation
β βββ PRD.md # Product requirements
β
βββ src/ # π» Your source code (created by agents)
βββ ...
What Gets Created:
| Directory/File | Created By | Purpose |
|---|---|---|
.sprinty/ |
sprinty init |
Stores sprint state and configuration |
backlog.json |
Product Owner | Prioritized list of tasks |
sprints/ |
Product Owner | Sprint plans for each iteration |
reviews/ |
Product Owner | Sprint review outcomes |
logs/ |
Sprinty | Agent output and debugging info |
src/ |
Developer Agent | Your actual application code |
{
"project": "my-project",
"items": [
{
"id": "TASK-001",
"title": "Implement feature X",
"type": "feature",
"priority": 1,
"story_points": 5,
"status": "backlog",
"sprint_id": null,
"acceptance_criteria": [
"Feature can be enabled via config",
"All edge cases handled",
"Unit tests achieve 90% coverage"
],
"dependencies": [],
"created_at": "2026-01-06T10:00:00Z",
"updated_at": "2026-01-06T10:00:00Z"
}
],
"metadata": {
"total_items": 1,
"total_points": 5
}
} βββββββββββββββββββββββββββββββββββββββ
β BACKLOG β
β (Waiting to be selected) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
Sprint Planning
β
β
ββββββββββββββββββββββββββββββββββββββββ
β READY β
β (Selected for current sprint) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
Developer starts
β
β
ββββββββββββββββββββββββββββββββββββββββ
β IN_PROGRESS β
β (Developer implementing) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
Implementation complete
β
β
ββββββββββββββββββββββββββββββββββββββββ
β IMPLEMENTED β
β (Ready for QA) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
QA starts
β
β
ββββββββββββββββββββββββββββββββββββββββ
β QA_IN_PROGRESS β
β (QA verifying) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βββββββββββββ΄ββββββββββββ
β β
QA Passed QA Failed
β β
β β
ββββββββββββββββββββββ ββββββββββββββββββββββ
β QA_PASSED β β QA_FAILED β
β (Ready for review) β β (Needs rework) β
βββββββββββ¬ββββββββββββ ββββββββββββ¬ββββββββββ
β β
PO Accepts β Rework Cycle
β (max 3 cycles)
β β
ββββββββββββββββββββββ β
β DONE β β
β (Completed!) β β
ββββββββββββββββββββββ β
β
βββββββββββββββββββββββββββββ
(Back to IN_PROGRESS)
Status Descriptions:
| Status | Description | Next State |
|---|---|---|
backlog |
Waiting to be selected | β ready |
ready |
Selected for sprint | β in_progress |
in_progress |
Developer working | β implemented |
implemented |
Code done, needs QA | β qa_in_progress |
qa_in_progress |
QA testing | β qa_passed or qa_failed |
qa_passed |
QA approved | β done |
qa_failed |
QA rejected | β in_progress (rework) |
done |
Completed & accepted | Final state |
{
"project": {
"name": "my-project"
},
"agent": {
"cli_tool": "opencode", // Agent backend: "opencode" or "cursor-agent"
"model": "opencode/minimax-m2.1-free", // Model to use
"timeout_minutes": 15, // Timeout for agent execution
"output_format": "text" // Output format
},
"sprint": {
"max_sprints": 10, // Maximum number of sprints
"default_capacity": 20, // Default story points per sprint
"planning_max_loops": 3, // Max iterations in planning phase
"implementation_max_loops": 20, // Max iterations in dev phase
"qa_max_loops": 5, // Max iterations in QA phase
"review_max_loops": 2, // Max iterations in review phase
"max_rework_cycles": 3 // Max QA failure rework cycles
},
"rate_limiting": {
"max_calls_per_hour": 100, // API rate limit
"min_wait_between_calls_sec": 5 // Minimum wait between calls
},
"circuit_breaker": {
"max_consecutive_failures": 3, // Halt after N failures
"max_consecutive_no_progress": 5 // Halt if stuck for N loops
}
}Sprinty supports multiple AI agent CLI tools. During initialization, Sprinty creates config templates for easy switching:
sprinty init my-project --prd requirements.txtThis creates:
.sprinty/config.json(active config, default: Cursor-Agent).sprinty/config.cursor_agent.json(Cursor-Agent template).sprinty/config.opencode.json(OpenCode template)
Switch to Cursor-Agent (Recommended for Production):
cp .sprinty/config.cursor_agent.json .sprinty/config.jsonSwitch to OpenCode (Free tier):
cp .sprinty/config.opencode.json .sprinty/config.jsonTemporary Override:
export SPRINTY_AGENT_CLI=cursor-agent
sprinty run{
"agent": {
"cli_tool": "opencode",
"model": "opencode/minimax-m2.1-free"
}
}Installation:
curl -fsSL https://opencode.ai/install | bash
source ~/.bashrcAvailable Models:
opencode/minimax-m2.1-free- Free, no API key requiredopencode/glm-4.7-free- Alternative free modelopencode/gpt-4o-mini- Paid, more reliable- See OpenCode documentation for more models
Note: Free model may be less stable than paid options.
{
"agent": {
"cli_tool": "cursor-agent",
"model": "opus-4.5-thinking"
}
}Installation:
curl https://cursor.com/install -fsS | bashAvailable Models:
opus-4.5-thinking- Default, most capable with extended thinkingopus-4.5- Claude Opus without thinkingsonnet-4.5-thinking- Claude Sonnet with thinking (faster)sonnet-4.5- Claude Sonnet (fastest)
You can configure different models for each agent role (developer, qa, product_owner, final_qa). This is useful for optimizing costs or capabilities:
{
"agent": {
"cli_tool": "cursor-agent",
"model": "opus-4.5-thinking",
"models_by_role": {
"developer": "gpt-5.2-codex-xhigh-fast",
"qa": "opus-4.5-thinking",
"product_owner": "opus-4.5-thinking",
"final_qa": "gpt-5.2-codex-xhigh-fast"
}
}
}Example use cases:
- Use a more capable model (opus) for complex developer tasks
- Use a faster/cheaper model (sonnet) for QA validation
- Use the thinking model for planning, non-thinking for simple tasks
If a role is not specified in models_by_role, it falls back to the default model setting.
| Feature | Cursor-Agent | OpenCode |
|---|---|---|
| Cost | π° Requires Cursor subscription | β Free tier available |
| Setup | Easy (curl install) | Easy (curl install) |
| Default Model | opus-4.5-thinking |
opencode/minimax-m2.1-free |
| Stability | β Very stable | |
| Instruction Following | β Excellent | |
| Best For | Production, important projects | Testing, experimentation |
Recommendation: Use Cursor-Agent for production workloads (default). The free OpenCode model is good for experimentation but may crash or not follow instructions consistently.
### Environment Variables
Customize Sprinty's behavior with these environment variables:
```bash
# Set AI agent backend (default: cursor-agent)
export AGENT_CLI_TOOL=cursor-agent # or opencode
# Set agent model (optional, overrides config)
export AGENT_MODEL="opencode/minimax-m2.1-free"
# Set rate limit (default: 100)
export MAX_CALLS_PER_HOUR=200
# Change state directory (default: .sprinty)
export SPRINTY_DIR=".sprinty-custom"
# Change backlog file location (default: backlog.json)
export BACKLOG_FILE="custom_backlog.json"
# Configure agent retry behavior (for transient failures)
export CURSOR_AGENT_MAX_RETRIES=3 # Number of retry attempts
export CURSOR_AGENT_RETRY_DELAY=10 # Seconds between retries
# Run with custom settings
sprinty --container --workspace . run
| Variable | Default | Description |
|---|---|---|
AGENT_CLI_TOOL |
opencode |
Agent backend (opencode or cursor-agent) |
AGENT_MODEL |
(from config) | AI model to use |
AGENT_TIMEOUT_MINUTES |
15 |
Timeout for agent execution |
MAX_CALLS_PER_HOUR |
100 |
API rate limit for agent calls |
SPRINTY_DIR |
.sprinty |
Directory for state files |
BACKLOG_FILE |
backlog.json |
Backlog file location |
OPENCODE_API_KEY |
- | API key for opencode (if using paid models) |
CURSOR_API_KEY |
- | API key for cursor-agent |
CURSOR_AGENT_MAX_RETRIES |
3 |
Number of retry attempts on transient failures |
CURSOR_AGENT_RETRY_DELAY |
10 |
Seconds to wait between retry attempts |
Sprinty automatically retries agent execution on transient failures:
| Error Type | Behavior |
|---|---|
| Connection errors | Retry up to MAX_RETRIES times |
| Rate limits | Retry with exponentially increasing delay |
| Auth errors | No retry (requires manual fix) |
| Timeouts | No retry (too expensive) |
| Unknown errors | Retry up to MAX_RETRIES times |
# Example: More aggressive retry for unreliable networks
export CURSOR_AGENT_MAX_RETRIES=5
export CURSOR_AGENT_RETRY_DELAY=30
sprinty --container --workspace . runSprinty uses specific exit codes to indicate different completion states:
# Check exit code after run
sprinty run
echo $?| Code | Name | Description | Action |
|---|---|---|---|
0 |
Success | Normal completion | β All good |
1 |
Error | General error occurred | π Check logs |
10 |
Circuit Breaker | Halted due to no progress | π§ Review sprint state, reset circuit |
20 |
Project Done | All tasks completed! | π Celebrate! |
21 |
Max Sprints | Reached sprint limit | π Increase max_sprints if needed |
Example Usage:
# Script that handles different exit codes
sprinty --container --workspace . run
EXIT_CODE=$?
case $EXIT_CODE in
0)
echo "Sprint completed successfully"
;;
10)
echo "Circuit breaker triggered - checking logs..."
sprinty status
;;
20)
echo "Project complete! π"
sprinty metrics
;;
21)
echo "Max sprints reached - project may need more time"
;;
*)
echo "Error occurred - check logs/agent_output/"
;;
esacSprinty uses role-specific prompts located in the prompts/ directory:
| Agent | File | Responsibilities |
|---|---|---|
| Product Owner | prompts/product_owner.md |
Parse PRD, create backlog, plan sprints, review work |
| Developer | prompts/developer.md |
Implement features, write tests, follow best practices |
| QA | prompts/qa.md |
Verify acceptance criteria, test functionality |
Each agent must output a structured status block for Sprinty to parse:
---SPRINTY_STATUS---
ROLE: developer
PHASE: implementation
SPRINT: 1
TASKS_COMPLETED: 1
TASKS_REMAINING: 2
BLOCKERS: none
STORY_POINTS_DONE: 5
TESTS_STATUS: PASSING
PHASE_COMPLETE: false
PROJECT_DONE: false
NEXT_ACTION: Continue with TASK-002
---END_SPRINTY_STATUS---
Status Block Fields:
| Field | Description | Example Values |
|---|---|---|
ROLE |
Agent role | product_owner, developer, qa |
PHASE |
Current phase | planning, implementation, qa, review |
SPRINT |
Sprint number | 1, 2, 3 |
TASKS_COMPLETED |
Tasks done this sprint | 3 |
TASKS_REMAINING |
Tasks left in sprint | 2 |
BLOCKERS |
Current blockers | none, dependency on TASK-005 |
STORY_POINTS_DONE |
Points completed | 15 |
TESTS_STATUS |
Test status | PASSING, FAILING, N/A |
PHASE_COMPLETE |
Phase done? | true, false |
PROJECT_DONE |
Project complete? | true, false |
NEXT_ACTION |
What's next | Description of next step |
This protocol allows Sprinty to track progress and orchestrate the workflow automatically.
Sprinty includes comprehensive test suites using bats.
# Install bats (if not already installed)
npm install -g bats
# Run all unit tests
bats tests/unit/
# Run specific test file
bats tests/unit/test_backlog_manager.bats
# Run all integration tests
bats tests/integration/
# Run specific integration test
bats tests/integration/test_full_workflow.batstests/
βββ helpers/
β βββ test_helper.bash # Shared test utilities
β
βββ unit/ # Unit tests
β βββ test_backlog_manager.bats # Backlog CRUD operations
β βββ test_sprint_manager.bats # Sprint state management
β βββ test_circuit_breaker.bats # Circuit breaker logic
β βββ test_rate_limiter.bats # Rate limiting
β βββ test_done_detector.bats # Completion detection
β βββ test_metrics_collector.bats # Metrics calculations
β βββ ...
β
βββ integration/ # Integration tests
βββ test_full_workflow.bats # End-to-end workflow
βββ test_sprint_lifecycle.bats # Complete sprint cycle
βββ test_qa_workflow.bats # QA with rework cycles
βββ ...
# Source modules for interactive testing
source lib/utils.sh
source lib/backlog_manager.sh
# Test backlog operations
init_backlog "test-project"
add_backlog_item "Test task" "feature" 1 3
list_backlog
backlog_summary
# Test sprint manager
source lib/sprint_manager.sh
init_sprint_state
start_sprint 1Sprinty is built with a modular architecture. Each module is self-contained and testable:
| Module | Description | Key Functions |
|---|---|---|
lib/utils.sh |
Core utilities | log_info, log_error, get_timestamp, json_get, json_set |
lib/backlog_manager.sh |
Backlog CRUD | init_backlog, add_backlog_item, list_backlog, update_backlog_item_status |
lib/sprint_manager.sh |
Sprint state | init_sprint_state, start_sprint, end_sprint, get_current_phase |
lib/agent_adapter.sh |
cursor-agent integration | call_agent, parse_agent_output, extract_status_block |
lib/circuit_breaker.sh |
Loop prevention | check_circuit_breaker, record_progress, reset_circuit_breaker |
lib/rate_limiter.sh |
API rate control | check_rate_limit, record_api_call, get_wait_time |
lib/done_detector.sh |
Completion detection | check_project_done, check_sprint_done, should_exit |
lib/metrics_collector.sh |
Analytics | calculate_burndown, get_velocity, generate_metrics_report |
lib/container.sh |
Container management | build_container_cache, run_in_container, list_containers |
sprinty.sh (main)
β
βββ utils.sh (always loaded first)
β
βββ backlog_manager.sh
β βββ utils.sh
β
βββ sprint_manager.sh
β βββ utils.sh
β
βββ agent_adapter.sh
β βββ utils.sh
β βββ rate_limiter.sh
β
βββ circuit_breaker.sh
β βββ utils.sh
β
βββ done_detector.sh
β βββ utils.sh
β βββ backlog_manager.sh
β
βββ metrics_collector.sh
β βββ utils.sh
β βββ backlog_manager.sh
β βββ sprint_manager.sh
β
βββ container.sh
βββ utils.sh
Follow these steps to extend Sprinty:
-
Create/modify module in
lib/# Create new module touch lib/my_feature.sh -
Implement functionality
#!/usr/bin/env bash # Source dependencies source "$(dirname "${BASH_SOURCE[0]}")/utils.sh" # Export your functions my_feature_function() { log_info "Doing something..." } export -f my_feature_function
-
Source in
sprinty.sh# Add to sprinty.sh source "${LIB_DIR}/my_feature.sh"
-
Add tests in
tests/unit/# tests/unit/test_my_feature.bats @test "my_feature_function works" { run my_feature_function [ "$status" -eq 0 ] }
-
Update documentation
- Add to this README
- Update inline comments
- Add usage examples
# β
DO: Use jq for JSON operations
result=$(jq -r '.items[] | select(.id == "TASK-001")' backlog.json)
# β DON'T: Use grep/sed for JSON
result=$(grep -A 5 "TASK-001" backlog.json)
# β
DO: Atomic writes with temp files
jq '.metadata.updated = true' backlog.json > backlog.json.tmp
mv backlog.json.tmp backlog.json
# β DON'T: Direct overwrites
jq '.metadata.updated = true' backlog.json > backlog.json
# β
DO: Export functions that need to be accessible
export -f my_function
# β
DO: Source utils.sh first in every module
source "$(dirname "${BASH_SOURCE[0]}")/utils.sh"
# β
DO: Use consistent logging
log_info "Processing task..."
log_error "Failed to process task"
log_success "Task completed"- Use 2 spaces for indentation
- Quote all variable expansions:
"${var}" - Use
[[ ]]for conditionals, not[ ] - Prefix local variables with
local - Use descriptive function names:
verb_nounpattern
# Always test with bats before committing
bats tests/unit/
# Test individual modules
source lib/my_feature.sh
my_feature_function "test-input"
# Test with different scenarios
export SPRINTY_DIR=".test-sprinty"
sprinty init test --prd test.mdWe welcome contributions! Here's how to get started:
-
Fork the repository
# Fork on GitHub, then clone your fork git clone https://github.com/YOUR_USERNAME/sprinty.git cd sprinty
-
Create a feature branch
git checkout -b feature/amazing-feature
-
Make your changes
- Add features or fix bugs
- Follow the development best practices
- Add tests for new functionality
- Update documentation
-
Test your changes
# Run all tests bats tests/unit/ bats tests/integration/ # Manual testing ./sprinty.sh init test-project --prd examples/test.md ./sprinty.sh --monitor run
-
Commit with clear messages
git commit -m 'feat: Add amazing feature'Use conventional commits:
feat:- New featurefix:- Bug fixdocs:- Documentation onlytest:- Adding/updating testsrefactor:- Code refactoringchore:- Maintenance tasks
-
Push to your fork
git push origin feature/amazing-feature
-
Open a Pull Request
- Go to the original repository
- Click "New Pull Request"
- Describe your changes
- Link any related issues
- π Bug fixes - Found an issue? Fix it!
- β¨ New features - Add new capabilities
- π Documentation - Improve guides and examples
- π§ͺ Tests - Increase test coverage
- π¨ UI/UX - Improve dashboard and output formatting
- π§ Performance - Optimize slow operations
- π Examples - Add example PRDs and use cases
- Automated checks run on all PRs
- Maintainers review code within 2-3 days
- Address any feedback
- Once approved, maintainer will merge
- π¬ Open an issue
- π§ Contact maintainers
- π Check existing discussions
MIT License - See LICENSE for details.
- Inspired by Ralph - Geoffrey Huntley's autonomous development technique
- Reference implementation from ralph-cursor-agent
- Built for Cursor Agent CLI by Anthropic
- Community - Thanks to all contributors and early adopters!
git clone https://github.com/your-username/sprinty.git && cd sprinty
./install.sh
sprinty init my-project --prd requirements.md && sprinty --container --workspace . --monitor runπ Documentation β’ π‘ Examples β’ π Issues β’ π¬ Discussions
Made with β€οΈ for autonomous development
Let Sprinty handle the sprints, you handle the vision.


