ISA polls your repositories, orchestrates Claude and Gemini agents to plan and implement changes, validates through your CI pipeline, and opens pull requests. No database, no external services — just GitHub.
Label an issue with isa:trigger and ISA handles the rest. When things go differently, the pipeline adapts.
Workspace ready — 3 repos identified
acme/backend-api — target repo (this issue)acme/shared-middleware — existing throttling patternsacme/api-gateway — existing rate limit headers
Plan ready — 3 files across 1 repo
src/middleware.py — Sliding window rate limiter middleware
src/routes.py — Apply rate limiter to public endpointssrc/config.py — RATE_LIMIT, RATE_WINDOW settings
+85 −2 across 3 files · All CI checks passing
Adds sliding window rate limiting to all public API endpoints. Configurable per-route limits with shared middleware.
src/middleware.py — New RateLimiter class with sliding windowsrc/routes.py — @rate_limit decorator on public endpointssrc/config.py — RATE_LIMIT, RATE_WINDOW settingsEach pipeline step is powered by a dedicated AI agent with its own tools and model. Mix Claude and Gemini freely across roles.
Identifies which repos matter and builds a multi-repo workspace.
Explores the codebase and builds a step-by-step implementation plan.
Edits files, runs commands, and pushes changes to a feature branch.
Checks CI results and test output against the original plan.
Any model, any role — mix providers freely across agents.
Define what repos to watch, how to process issues, and which AI models to use. No code changes needed for most customizations.
repos: # Simple: just point a repo at a workflow - name: my-python-project workflow: general # Advanced: per-repo overrides - name: my-critical-project workflow: general base_branch: develop # override workflow default max_retries: 5 # override workflow default require_plan_approval: true # force approval for this repo validator: config: timeout: 300 # merged with workflow validator config
workflows: general: working_branch: "isa/{issue_number}" base_branch: main context_resolver: isa.context.SingleRepoResolver agents: planner: general-planner # references agents.yaml implementation: general-implementation validator: type: none # "none" or dotted Python path completion: create_prs: true pr_targets: [main] # PR to multiple branches close_issue: true delete_working_branch: false require_plan_approval: false max_retries: 3 max_run_duration: 1800 # seconds before poller kills the run hooks: on_success: - type: api_call config: url: "https://your-webhook.example.com/notify" body: { text: "ISA completed #{issue_number}" }
agents: general-planner: model: opus # or sonnet, haiku, gemini-* timeout: 600 allowed_tools: - Read - Glob - Grep system_prompt: | You are a planning agent. Given a GitHub issue and a codebase, explore the code and create a detailed implementation plan. general-implementation: model: opus timeout: 600 allowed_tools: [Edit, Write, Read, Glob, Grep, Bash] # thinking: high # optional reasoning budget system_prompt: | You are an implementation agent. Follow the plan exactly. Do not add features beyond what was asked.
No SDKs, no frameworks, no plugin registries. Write a class, reference it in YAML, and ISA loads it at runtime.
The backbone of multi-repo workflows. The Discovery agent identifies repos at runtime, then resolve() clones them and expand() adds more mid-planning. Extra context keys are automatically injected into agent prompts.
Run after implementation to check results. Integrate your CI pipeline, test suites, linters, or any custom validation. Three result statuses drive the next step.
Actions that fire at pipeline transitions. Merge branches, push code, call webhooks, run scripts, or write your own handler — all configurable per workflow.
Hook points in the pipeline lifecycle
Review plans before implementation, answer agent questions, retry with feedback, or revert changes — all from GitHub issue comments.
Plan ready for review
src/middleware.py — Sliding window rate limitersrc/routes.py — Apply limiter to public endpointssrc/config.py — RATE_LIMIT, RATE_WINDOW settings
Reply /approve to proceed or /replan with feedback.
/replan Also add rate limit headers (X-RateLimit-Remaining) to responses
Updated plan
src/middleware.py — Sliding window rate limitersrc/routes.py — Apply limiter to public endpointssrc/config.py — RATE_LIMIT, RATE_WINDOW settingssrc/responses.py — Rate limit headers in API responses
Reply /approve to proceed.
/approve
PR #43 created → main. All checks passing.
/approve Accept plan, start implementation/replan Re-plan with your feedback/reject Reject the plan entirely/retry Re-plan after validation failure/revert Undo ISA commits (last, all, or specific SHA)/revalidate Re-run validation without re-planning/abort Stop processing this issuerequire_plan_approval: true in repos.yaml, or add the isa:require-approval label to any individual issue. Use isa:skip-approval to bypass approval on a case-by-case basis.
Every state transition is a comment edit. No external database, no Redis, no message queue. Crash recovery is a heartbeat check.
When the service restarts or a pipeline crashes mid-execution:
Distributed claiming uses a comment-ID tiebreaker: multiple instances can race, lowest comment ID wins. No coordination service needed.
ISA runs entirely in your environment. No code leaves your network. You bring your own AI provider keys.
Ship as a Docker image or Helm chart. Runs on any infrastructure with outbound HTTPS access.
ISA is available under the Business Source License 1.1. Free for non-commercial and evaluation use. Commercial production use requires a license.
Get ISA running on your repositories in a single afternoon.
Get in touch →
Public endpoints have no throttling. Add a sliding window rate limiter to
GETandPOSTroutes, return429when exceeded, and make limits configurable per-environment.