Catalog PyPI
Back to packageRELEASE DETAILS

0.2.0

PyPI

aegis-qa

Aegis — The AI Quality Control Plane

Published4 Apr 2026
Direct dependencies17
Transitive dependenciesNot calculated

README

Version 0.2.0 documentation

Aegis

CI PyPI Docker API Docs

The AI Quality Control Plane

Aegis is a lightweight orchestration layer that unifies AI-powered QA tools into a single control plane. It coordinates route discovery, test generation, bug triage, and fix proposals across your development workflow.

Architecture

graph TB
    subgraph Aegis["Aegis — Control Plane"]
        API[FastAPI API<br/>Typed OpenAPI Spec]
        WF[Workflow Engine]
        REG[Service Registry]
        EV[Event System<br/>Emitter · Log · Webhooks]
        HIST[History<br/>SQLite / In-Memory]
        HP[Health Endpoint<br/>Version · Uptime · Config]
        LP[Landing Page]
    end

    SDK[Python SDK<br/>AegisClient · AsyncAegisClient] --> API

    subgraph Tools["QA Tool Suite"]
        QA[QA Agent<br/>Route Discovery · Risk Analysis<br/>Test Generation · Orchestration]
        BUG[Bugalizer<br/>Bug Triage · Code Localization<br/>Duplicate Detection]
    end

    subgraph LLM["LLM Backend"]
        OLL[Ollama<br/>qwen2.5-coder:7b]
    end

    API --> WF
    WF --> REG
    WF --> HIST
    WF --> EV
    REG --> QA
    REG --> BUG
    QA --> OLL
    BUG --> OLL
    LP --> API
    EV -->|webhooks| EXT[External Systems]

Quick Start

# Install from PyPI
pip install aegis-qa

# Or install from source (for development)
pip install -e ".[dev]"

# Configure
cp .aegis.yaml.example .aegis.yaml
# Edit .aegis.yaml with your service URLs

# Check service status
aegis status

# Run the full QA pipeline
aegis run full_pipeline

# Start the API server + landing page
aegis serve

Python SDK

The SDK is included when you pip install aegis-qa — no extra dependency needed.

from aegis_qa.client import AegisClient

# Sync client
with AegisClient(base_url="http://localhost:8000") as client:
    health = client.health()
    print(f"Status: {health.status}, uptime: {health.uptime_seconds}s")

    services = client.list_services()
    for svc in services:
        print(f"  {svc.name}: {svc.status}")

    result = client.run_workflow("full_pipeline")
    print(f"Pipeline {'passed' if result.success else 'failed'}")
from aegis_qa.client import AsyncAegisClient

# Async client
async with AsyncAegisClient(api_key="your-key") as client:
    workflows = await client.list_workflows()
    history = await client.recent_history(limit=5)

Deployment

Docker

# Pull the latest image
docker pull ghcr.io/jblacketter/aegis:latest

# Or build locally
docker build -t aegis .

# Run the server
docker run -p 8000:8000 aegis

# Verify it's running
curl http://localhost:8000/health

Docker Compose

# Start with SQLite persistence and config mounting
docker compose up

# Run in background
docker compose up -d

The compose file mounts .aegis.yaml (read-only) and persists the SQLite database on a named volume.

Environment Variables

VariableDescriptionDefault
AEGIS_DB_PATHOverride SQLite database pathValue from .aegis.yaml

Tools

ToolDescriptionFeatures
QA AgentRoute discovery, risk analysis, test generation & orchestrationRoute Discovery, Risk Assessment, Test Generation, Test Orchestration, Branch Board
BugalizerAI-powered bug triage, code localization & fix proposalsBug Triage, Code Localization, Duplicate Detection

CLI Commands

CommandDescription
aegis statusShow all services and their health status
aegis serveStart API server and serve landing page
aegis run <workflow>Execute a named workflow pipeline
aegis openapiExport OpenAPI spec as JSON
aegis config showPrint resolved configuration

API Endpoints

EndpointMethodDescription
/healthGETHealth check with version, uptime, and config summary
/api/servicesGETList services with health status
/api/services/{name}/healthGETLive health check for one service
/api/workflowsGETList all configured workflows
/api/workflows/{name}GETGet a specific workflow definition
/api/workflows/{name}/runPOSTTrigger a named workflow
/api/workflows/{name}/historyGETExecution history for a workflow
/api/historyGETRecent execution history across all workflows
/api/eventsGETRecent events (filterable by type)
/api/portfolioGETTool metadata for landing page

Configuration

Aegis uses .aegis.yaml for configuration. See .aegis.yaml.example for the full schema.

Environment variables can be interpolated using ${VAR_NAME} syntax:

services:
  qaagent:
    url: ${QAAGENT_URL:-http://localhost:8080}

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 17

Native requirements
17 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
typer
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
typer>=0.12runtime
pydantic
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pydantic>=2.0runtime
pydantic-settings
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pydantic-settings>=2.0runtime
rich
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
rich>=13.7runtime
PyYAML
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
PyYAML>=6.0runtime
fastapi
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
fastapi>=0.110runtime
uvicorn
Environment
{
  "extras": "standard",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
uvicorn[standard]>=0.27runtime
httpx
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
httpx>=0.27runtime
aiosqlite
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
aiosqlite>=0.20runtime
prometheus_client
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
prometheus_client>=0.20runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest>=8.0; extra == "dev"runtime
pytest-asyncio
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest-asyncio>=0.23; extra == "dev"runtime
pytest-cov
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest-cov>=6.0; extra == "dev"runtime
ruff
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
ruff>=0.8; extra == "dev"runtime
mypy
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
mypy>=1.13; extra == "dev"runtime
types-PyYAML
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
types-PyYAML>=6.0; extra == "dev"runtime
pre-commit
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pre-commit>=4.0; extra == "dev"runtime

Distribution files

2 collected
aegis_qa-0.2.0-py3-none-any.whl

bdist_wheel · 49.08 KB · Python py3

Source file
aegis_qa-0.2.0.tar.gz

sdist · 65.32 KB · Python source

Source file

Repository

PENDING
jblacketter/aegis

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 20:18 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:f2748d3e56bca14aece362ca52b068b2fb6b2335599cc2e29df14e5307708d89

Other collected versions

View all collected versions →