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
- 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
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
AI_PROVIDER=gemini
AI_MODEL=gemini-2.5-flash
GEMINI_API_KEY=your-key-here
# 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 |
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
Release history Release notifications | RSS feed
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 cicaddy-0.3.1.tar.gz.
File metadata
- Download URL: cicaddy-0.3.1.tar.gz
- Upload date:
- Size: 247.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
649542c84da47d3faff5ee63698f3b7c78c369e34bbfd92bf217596d6254200f
|
|
| MD5 |
aa9438ddd6daf789aae43907caa8bd3f
|
|
| BLAKE2b-256 |
1efe74b486d355946810284f398a1fe38071f96016cb6306e82ba143b3f99a7c
|
Provenance
The following attestation bundles were made for cicaddy-0.3.1.tar.gz:
Publisher:
python-publish.yml on waynesun09/cicaddy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cicaddy-0.3.1.tar.gz -
Subject digest:
649542c84da47d3faff5ee63698f3b7c78c369e34bbfd92bf217596d6254200f - Sigstore transparency entry: 1087424236
- Sigstore integration time:
-
Permalink:
waynesun09/cicaddy@e6eba1fc478fdc7d88338c94e9922ae991ed0b86 -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/waynesun09
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@e6eba1fc478fdc7d88338c94e9922ae991ed0b86 -
Trigger Event:
release
-
Statement type:
File details
Details for the file cicaddy-0.3.1-py3-none-any.whl.
File metadata
- Download URL: cicaddy-0.3.1-py3-none-any.whl
- Upload date:
- Size: 288.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2d7d7d037c40211b56f8a94025d124f26ddcb22b2cbdacde85def6c150cfaa4
|
|
| MD5 |
c1869c67a037fdf2edbb24cb9ae2f845
|
|
| BLAKE2b-256 |
b4bfa69a2f95f49d4625865169af7938eb37cc771332dd956582c61555fffceb
|
Provenance
The following attestation bundles were made for cicaddy-0.3.1-py3-none-any.whl:
Publisher:
python-publish.yml on waynesun09/cicaddy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cicaddy-0.3.1-py3-none-any.whl -
Subject digest:
f2d7d7d037c40211b56f8a94025d124f26ddcb22b2cbdacde85def6c150cfaa4 - Sigstore transparency entry: 1087424301
- Sigstore integration time:
-
Permalink:
waynesun09/cicaddy@e6eba1fc478fdc7d88338c94e9922ae991ed0b86 -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/waynesun09
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@e6eba1fc478fdc7d88338c94e9922ae991ed0b86 -
Trigger Event:
release
-
Statement type: