SDLCAgent v1.0.0
First working release. The agent turns an informal bug report into a structured GitHub issue, checks whether the problem has already been reported, and asks for confirmation before filing anything.
What it does
Given a one-line report such as "the app crashes when exporting reports over 1000 rows", the agent:
- Drafts a structured issue — title, type, severity, summary, reproduction steps and labels — validated against a Pydantic schema
- Searches open issues in the repository and asks the model whether any of them already covers the same problem
- Stops and reports the existing issue if it is a duplicate
- Otherwise pauses for human approval, then files the issue and returns its URL
Duplicate detection works across wording and across languages: a report written in Portuguese is correctly matched against an existing issue written in English.
How it is built
- LangGraph for orchestration. The flow branches (duplicate vs. new) and pauses (human approval), which is what a graph buys over a linear chain.
- Pydantic schemas for every model response. Field descriptions double as prompt instructions, and malformed output fails at the boundary instead of downstream.
- Deterministic where it can be. Issue search and markdown rendering are plain code; the model is used for drafting and for judging whether two issues describe the same problem.
- Provider-agnostic.
LLM_PROVIDERswitches between Groq, Google Gemini and any OpenAI-compatible endpoint, including a self-hosted vLLM instance. - Human in the loop. Execution is interrupted before writing to GitHub. Nothing is filed without explicit approval.
Requirements
- Python 3.11+
- A Groq API key (free tier, no card required) or another supported provider
- A GitHub fine-grained token with
Issues: Read and writeon the target repository
Getting started
pip install -e ".[dev]"
cp .env.example .env # add GROQ_API_KEY, GITHUB_TOKEN and GITHUB_REPO
sdlc-agent "the login page breaks when the email has capitals"Known limitations
- Duplicate search matches on shared keywords, with no stemming, synonyms or stopword filtering. Common words like "fix" or "error" can surface irrelevant candidates.
- Checkpointing is in-memory, so a paused run does not survive a restart.
- Graph state holds Pydantic objects directly, which makes the checkpointer serialise custom types.
Next
Jira support, semantic duplicate search using embeddings, and multi-repository configuration.