Sprint-to-PR delivery automation platform for Jira and Azure DevOps teams.
Project description
SendSprint
🇺🇸 English. Leia em português: README.pt-BR.md.
SendSprint is a sprint-to-pull-request delivery platform for engineering teams. It reads Jira or Azure DevOps sprint work, maps the target architecture, creates isolated branches/worktrees, builds, tests, checks security, captures evidence, commits, opens pull requests, reviews the diff, and reports delivery state in one controlled flow with opt-in LLM code generation and deploy callbacks.
The proposal is simple: remove the manual coordination tax between backlog, code, tests, evidence, and PRs. SendSprint gives teams a repeatable execution lane from sprint planning to develop, with preflight validation, dry-run planning, resumable runs, branch-per-task delivery, and auditable output.
Productivity Visuals
Team without vs. with SendSprint
SendSprint as the delivery engine
🎬 Videos
Productivity before/after (47s)
▶️ English MP4 (1920×1080, 47s, 7.1 MB) · 🇧🇷 Portuguese MP4 (1920×1080, 47s, 7.1 MB)
Product explainer (56s)
▶️ Full MP4 (1920×1080, 56s, 20 MB) · 🖼️ Poster
Run loop demo (22s) — what web/RunScreen shows
▶️ Full MP4 (1920×1080, 22s, 5.5 MB) · 🛠️ Source (Remotion)
🇧🇷 Versão em português dos vídeos: ver README.pt-BR.md.
Presentations
Stakeholder-ready implementation decks are available in editable and PDF formats:
The MP4 videos are generated locally by Remotion and include a generated music bed plus workflow sound effects (cd video && npm run build:preview).
The run-loop one shows exactly what happens in the browser when you open
http://localhost:8081 and start a sprint delivery: round 1 fails with a
visual regression, fix-loop applies patches, round 2 turns green, PR opens.
🌐 Run it in your browser (web)
# 1) backend
pip install -e ".[api]"
python -m sendsprint.api # http://localhost:8765
# 2) web UI (separate terminal)
cd web && npm install && npm run dev # http://localhost:8081
See web/README.md for the full walkthrough and
sendsprint/api/README.md for the HTTP/SSE API.
Works across 13 AI coding tools: Claude Code, Codex CLI, GitHub Copilot, Cursor, Windsurf, Kiro, Zed, Cline, Continue, Aider, Sourcegraph Cody, Hermes, Openclaw.
Status: v0.13.0 — Chat-triggered one-command UX (
sendsprint sprint). 13 IDE manifests. OS-keyring credential cache. Azure DevOps MCP installer. Auto-scaffold.specsplus latestagentic-startersync. Full delivery flow with opt-in LLM code generation and deploy callbacks. Preflight, dry-run delivery plans, resumable run state, confidence routing, required PR reviewers, post-PR validation, and deploy ticket callbacks are built in. Product visuals, before/after Remotion explainers with music and sound effects, and bilingual implementation decks are bundled. Branches default tofeature/{number}-{title}and PRs targetdevelop; both can be configured. Azure backlog hierarchy checks prevent invalid Issue -> Task parent links. Jira/Azure DevOps core guide is bundled for stable delivery rules. Coverage badge generation and changelog promotion are now automated in GitHub Actions. PyPI publishing is automated on release tags.
Flow
| Step | Name | What it does |
|---|---|---|
| 1 | Read sprint | Fetch stories/tasks/bugs from Jira or Azure DevOps |
| 2 | Architecture mapping | Inspect repo docs; auto-generate baseline if score < 0.6 |
| 3 | Dev | Detect tech stack, create worktree, install deps + build |
| 4 | Lint | Static analysis per tech (eslint, ruff, clippy, etc.) |
| 5 | Tests | Unit tests + Playwright E2E with screenshot evidence |
| 6 | Security review | Flag-only scan (secrets, env files, npm audit) |
| 7 | Fix loop | If lint/tests/security fail: re-build + re-run (max 3 rounds) |
| 8 | Commit | git add -A && git commit on worktree branch |
| 9 | Create PR | GitHub (gh CLI) or Azure DevOps REST API |
| 10 | PR review + Delivered | Diff analysis + RunReport with JSON export |
Optional hooks:
- Step 3.5 — LLM code generation applies an opt-in unified diff between build and lint.
- Step 11 — Deploy trigger posts an opt-in webhook after PR creation and attempts a ticket status update.
Transport priority: mcp -> api -> playwright.
Requirements
- Python
>=3.11 - Playwright (
playwright install chromium) - Optional: Jira API token / Azure DevOps PAT, or Atlassian / Azure DevOps MCP server
Install
git clone https://github.com/wesleysimplicio/SendSprint.git
cd SendSprint
pip install -e .
playwright install chromium
cp .env.example .env # fill in credentials
Quick start
CLI
# Full 10-step flow against a Jira sprint
sendsprint run jira 42 --workspace workspace.yaml --scope mine -o report.json
# Same flow with opt-in LLM patch generation and deploy callback
sendsprint run jira 42 --workspace workspace.yaml --scope mine --llm-codegen --deploy
# Full flow against Azure DevOps
sendsprint run azuredevops "Team\\Sprint 12" --repo ./repo
# Validate environment/sprint safety before delivery
sendsprint preflight azuredevops "Team\\Sprint 12" --workspace workspace.yaml
# Plan branches/repos/PR targets without writing files or opening PRs
sendsprint run azuredevops "Team\\Sprint 12" --workspace workspace.yaml --dry-run
# Resume a previous run idempotently
sendsprint run azuredevops "Team\\Sprint 12" --workspace workspace.yaml --run-id sprint-12
# Detect tech stack
sendsprint detect-tech ./repo
# Check architecture mapping (with auto-build if missing)
sendsprint check-architecture ./repo --build
# Sync latest agentic-starter scaffold files into a repo
sendsprint sync-agentic-starter ./repo --ref latest
Python
from sendsprint.flow import SprintFlow
from sendsprint.operators import JiraOperator
from sendsprint.workspace import load_workspace
from sendsprint.scope import build_scope
ws = load_workspace("workspace.yaml")
scope = build_scope(mode="mine", user_email="dev@example.com")
flow = SprintFlow(operator=JiraOperator(), workspace=ws, scope=scope)
result = flow.run(sprint_id=42)
print(result.run_report.summary)
Read a sprint only
from sendsprint.operators import JiraOperator
op = JiraOperator(
base_url="https://your-org.atlassian.net",
transport="auto",
)
sprint = op.read_sprint(sprint_id=42)
for item in sprint.items:
print(f" [{item.type}] {item.key} - {item.title} ({item.status})")
Multi-repo workspace
Define repos in workspace.yaml:
name: my-project
root_path: /home/dev/repos
new_projects_dir: Projetos/novos
pr_provider: github
default_base_branch: develop
branch_name_template: feature/{number}-{title}
pr_reviewers:
- reviewer@example.com
required_pr_reviewers:
- lead@example.com
code_generation:
enabled: false
provider: anthropic
model: claude-opus-4-7
max_usd: 1.0
max_tokens: 8000
deploy:
enabled: false
provider: webhook
url: https://deploy.example.com/hooks/sendsprint
final_status: Deployed
repos:
- name: backend-api
path: backend-api
role: api
tech: dotnet
default_branch: main
pr_target_branch: develop
# Optional per-repo reviewer rules:
# required_pr_reviewers:
# - daniel.ribeiro_ext@interplayers.com.br
# Optional per-repo override:
# branch_name_template: hotfix/{number}-{title}
- name: frontend-web
path: frontend-web
role: front
tech: angular
- name: mobile-app
path: mobile-app
role: mobile
tech: flutter
Azure DevOps MCP can be configured for Codex with:
sendsprint install-ado-mcp --organization my-org --project "Projetos Ágeis" --team "Squad Yankee"
SendSprint can also expose its own deterministic tooling as an MCP stdio server:
sendsprint mcp-serve
Current default MCP tools:
sendsprint_detect_techsendsprint_check_architecturesendsprint_version
The transport uses JSON-RPC 2.0 with Content-Length framing so Claude Code
and similar hosts can launch it directly.
When a User Story has no child tasks, SendSprint creates in-memory front/back
tasks before delivery. Generated tasks keep parent_key pointing to the story
and labels scope:front / scope:back, so each task runs only against matching
workspace repos.
Architecture
sendsprint/
├── operators/ JiraOperator, AzureDevopsOperator (mcp|api|playwright)
├── models/ Sprint, SprintItem, StepReport, RunReport (Pydantic v2)
├── agents/
│ ├── worktree.py Git worktree isolation for parallel branches
│ ├── dev.py Install + build per tech stack (16 package managers)
│ ├── lint_runner.py Static analysis per tech (19 linters)
│ ├── test_runner.py Unit + E2E with screenshot evidence
│ ├── security_reviewer.py Secret scan, env audit, npm audit
│ ├── pr_creator.py GitHub (gh) / Azure DevOps (REST) PR creation
│ └── pr_reviewer.py Diff static checks (TODO, debug, long lines)
├── architecture/
│ ├── mapper.py Weighted architecture scoring
│ └── builder.py Auto-generate baseline docs
├── tech/
│ └── detector.py Filesystem marker detection (25+ techs)
├── workspace/
│ └── loader.py YAML/JSON multi-repo workspace config
├── scope.py --scope mine filtering (account_id, email, name)
├── flow/
│ └── sprint_flow.py orchestrator + opt-in codegen/deploy hooks
├── llm/ Provider-agnostic LLM client
└── cli.py Typer CLI
Environment variables
| Variable | Required for |
|---|---|
JIRA_BASE_URL |
Jira API |
JIRA_EMAIL |
Jira API |
JIRA_API_TOKEN |
Jira API |
AZURE_DEVOPS_ORG |
Azure DevOps API |
AZURE_DEVOPS_PROJECT |
Azure DevOps API |
AZURE_DEVOPS_PAT |
Azure DevOps API |
PLAYWRIGHT_CDP_URL |
Playwright fallback (default http://127.0.0.1:9222) |
LLM_PROVIDER |
LLM step (optional) |
LLM_MODEL |
LLM step (optional) |
Assistant Integrations
Per-platform integration manifests under skills/:
| File | Platform |
|---|---|
skills/claude/SKILL.md |
Claude Code |
skills/codex/AGENTS.md |
Codex / OpenAI |
skills/hermes/hermes.md |
Hermes Agent |
skills/openclaw/openclaw.md |
Openclaw |
skills/copilot/copilot-instructions.md |
GitHub Copilot |
Each references the same Python core; the manifest teaches the host assistant how to invoke SendSprint consistently.
Tests
pip install -e ".[dev]"
pytest tests/ -v
The suite covers operators, architecture mapper/builder, tech detector, scope filtering, workspace loading, CLI overrides, and all delivery agents including codegen/deploy orchestration.
Roadmap
- Step 1 - Sprint reading (Jira + Azure DevOps, MCP / API / Playwright)
- Step 2 - Architecture mapping + auto-build baseline docs
- Step 3 - Dev agent (tech detection, worktree isolation, install + build)
- Step 4 - Test runner (unit + Playwright E2E with screenshot evidence)
- Step 5 - Security reviewer (flag-only: secrets, env, npm audit)
- Step 6 - Fix loop (re-build + re-test, max 3 rounds)
- Step 7 - PR creation (GitHub gh CLI + Azure DevOps REST)
- Step 8 - PR review (diff static checks)
- Step 9 - RunReport with full evidence
- Multi-repo workspace support (workspace.yaml)
-
--scope minecurrent-user filtering - LLM-powered code generation per sprint item
- Deploy trigger + status callback to ticket
- MCP server mode (expose SendSprint as an MCP tool)
License
MIT - see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sendsprint-0.13.0.tar.gz.
File metadata
- Download URL: sendsprint-0.13.0.tar.gz
- Upload date:
- Size: 296.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04b356a3c197de6484a37c342c9e4e6425973f1fe6e8620531cd9ee9ca9858aa
|
|
| MD5 |
2fdad272ca946bbf6648592bd4ea098f
|
|
| BLAKE2b-256 |
bba4a235486a37a56cd536b3b04290fa91ae7c0cbbfa51ffd90a81b4f2d04822
|
File details
Details for the file sendsprint-0.13.0-py3-none-any.whl.
File metadata
- Download URL: sendsprint-0.13.0-py3-none-any.whl
- Upload date:
- Size: 113.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84dfdf2041e2b8552ab638961cdfb5b2ab756d84c0fda29e52c891868b17c63f
|
|
| MD5 |
4322bb13c6d91a3deac0ec355741e4cf
|
|
| BLAKE2b-256 |
96fc2d1a7e0848b314f38b4708691e069ec558b4d6bd7ce347e03997b9da3de5
|