Skip to main content

Platform-agnostic pipeline AI agent with MCP tool integration and multi-step execution engine

Project description

cicaddy

Platform-agnostic AI agent for running AI workflows in CI pipelines, with MCP tool integration and multi-step execution engine.

Features

  • Multi-provider AI: Gemini, OpenAI, Claude (direct API and Vertex AI for both Gemini and Claude)
  • Sub-agent delegation: AI-powered triage with parallel specialized sub-agents
  • MCP integration: Connect to any MCP-compatible tool server
  • Multi-step execution: Token-aware execution engine with recovery
  • YAML task definitions: DSPy-based task configuration
  • Notifications: Slack and email notification support
  • HTML reports: Customizable analysis report generation
  • Extensible agents: Registry-based agent factory for custom agents

Installation

pip install cicaddy

# With Vertex AI Claude support
pip install 'cicaddy[vertex]'

Quick Start

# Run with environment file
cicaddy run --env-file .env

# Run with CLI arguments
cicaddy run --ai-provider gemini --agent-type task --log-level DEBUG

# Show configuration
cicaddy config show --env-file .env

# Validate configuration
cicaddy validate --env-file .env

Configuration

Configure via environment variables or .env file:

# AI Provider (Gemini)
AI_PROVIDER=gemini
AI_MODEL=gemini-3-flash
GEMINI_API_KEY=your-key-here

# AI Provider (Claude via Vertex AI — uses Google Cloud ADC, no API key needed)
# AI_PROVIDER=anthropic-vertex
# AI_MODEL=claude-sonnet-4-6
# ANTHROPIC_VERTEX_PROJECT_ID=your-gcp-project
# CLOUD_ML_REGION=us-east5

# AI Provider (Gemini via Vertex AI — uses Google Cloud ADC, no API key needed)
# AI_PROVIDER=gemini-vertex
# AI_MODEL=gemini-3-flash-preview
# GOOGLE_CLOUD_PROJECT=your-gcp-project
# GOOGLE_CLOUD_LOCATION=global

# Agent
AGENT_TYPE=task
TASK_TYPE=scheduled_analysis

# MCP Servers (JSON array)
MCP_SERVERS_CONFIG=[]

# Notifications
SLACK_WEBHOOK_URL=https://hooks.slack.com/...

# DSPy Task File (takes precedence over AI_TASK_PROMPT)
AI_TASK_FILE=tasks/dora_report.yaml

DSPy Task Definition (YAML)

Instead of raw prompt strings (AI_TASK_PROMPT), define structured tasks in YAML with typed inputs, expected outputs, MCP tool constraints, and reasoning strategy. Set AI_TASK_FILE to your task file path.

See examples/dora_metrics_task.yaml for a complete DORA metrics analysis task using DevLake MCP, and examples/templates/report_template.html for the HTML report template.

Key schema fields:

Field Description
inputs[].env_var Resolve value from environment variable at load time
inputs[].format diff or code for fenced rendering in prompt
tools.servers Restrict to specific MCP servers
tools.required_tools Tools the AI must use during execution
tools.forbidden_tools Tools the AI must not use
reasoning chain_of_thought, react, or simple
output_format markdown, html, or json
context Supports {{VAR}} placeholders resolved at load time

Sub-Agent Delegation (v0.8.0+)

Enable AI-powered sub-agent delegation with DELEGATION_MODE=auto. An AI triage step analyzes the context, selects specialized sub-agents (security, architecture, performance, etc.), runs them in parallel with sibling awareness (each agent knows what others cover), and aggregates results.

# Add to your .env
DELEGATION_MODE=auto
MAX_SUB_AGENTS=3
cicaddy run --env-file .env

Built-in review agents: security-reviewer, architecture-reviewer, api-reviewer, database-reviewer, ui-reviewer, devops-reviewer, performance-reviewer, general-reviewer. Custom agents can be defined via YAML files in .agents/delegation/.

See docs/sub-agent-delegation.md for full configuration, built-in agent details, custom agent YAML format, and tool filtering. See examples/delegation/ for example configurations.

Extending with Platform Plugins

cicaddy discovers platform plugins automatically via Python entry_points. Plugins can register agents, CLI args, env vars, config sections, validators, and a settings loader — without modifying cicaddy itself.

1. Define plugin callables (my_plugin/plugin.py):

def register_agents():
    from cicaddy.agent.factory import AgentFactory
    from my_plugin.agent import MergeRequestAgent, detect_agent_type

    AgentFactory.register("merge_request", MergeRequestAgent)
    AgentFactory.register_detector(detect_agent_type, priority=40)

def get_cli_args():
    from cicaddy.cli.arg_mapping import ArgMapping
    return [
        ArgMapping(cli_arg="--mr-iid", env_var="CI_MERGE_REQUEST_IID",
                   help_text="Merge request IID"),
    ]

2. Register in pyproject.toml:

[project.entry-points."cicaddy.agents"]
my_platform = "my_plugin.plugin:register_agents"

[project.entry-points."cicaddy.cli_args"]
my_platform = "my_plugin.plugin:get_cli_args"

[project.entry-points."cicaddy.settings_loader"]
my_platform = "my_plugin.config:load_settings"

3. Install and run — plugins are discovered automatically:

pip install cicaddy my-cicaddy-plugin
cicaddy run --env-file .env

Available plugin groups: cicaddy.agents, cicaddy.cli_args, cicaddy.env_vars, cicaddy.config_sections, cicaddy.validators, cicaddy.settings_loader.

Official Plugins

Plugin Platform Description
cicaddy-gitlab GitLab AI-powered merge request reviews and branch analysis for GitLab CI
cicaddy-action GitHub GitHub Action for AI PR reviews and changelog generation

License

Apache-2.0

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

cicaddy-0.11.0.tar.gz (308.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cicaddy-0.11.0-py3-none-any.whl (358.2 kB view details)

Uploaded Python 3

File details

Details for the file cicaddy-0.11.0.tar.gz.

File metadata

  • Download URL: cicaddy-0.11.0.tar.gz
  • Upload date:
  • Size: 308.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cicaddy-0.11.0.tar.gz
Algorithm Hash digest
SHA256 3aa228604297d58ac0905861ceac0cc5264f6a29bbe7a9edec1215eeb51908f8
MD5 8409bc12ff02da65ed7cec97ab91882a
BLAKE2b-256 6501888c9e1a1012016c6c2390008295021dac6d50063cc5a97179cd07759711

See more details on using hashes here.

Provenance

The following attestation bundles were made for cicaddy-0.11.0.tar.gz:

Publisher: python-publish.yml on waynesun09/cicaddy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cicaddy-0.11.0-py3-none-any.whl.

File metadata

  • Download URL: cicaddy-0.11.0-py3-none-any.whl
  • Upload date:
  • Size: 358.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cicaddy-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f411032cb37fa84ade39073ba7577a1e6d023ddabca0f6b68fd39b9f60bd6578
MD5 f54ec4fcb1d0433c4b6e1b12f63c4b2d
BLAKE2b-256 4e5a2d2bf37d5c9fa5c79c3a6f4e649100bb51b958607b4fb4675273c083b86c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cicaddy-0.11.0-py3-none-any.whl:

Publisher: python-publish.yml on waynesun09/cicaddy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page