GitLab platform plugin for cicaddy AI agent
Project description
cicaddy-gitlab
GitLab platform plugin for the cicaddy AI agent framework.
Features
- Merge Request Code Review - AI-powered code review on GitLab merge requests with inline comments
- Branch Review - Compare branch changes against main for deployment readiness analysis
- Scheduled Analysis - Cron-based AI analysis jobs with MCP tool integration
- Multi-Provider AI - Support for Gemini, OpenAI, Claude
- DSPy Task Files - Declarative YAML prompt definitions for structured analysis
- GitLab CI Templates - Ready-to-use CI/CD templates for merge request and scheduled jobs
Installation
pip install cicaddy-gitlab
This automatically installs cicaddy core as a dependency and registers the GitLab plugin via entry points.
Quick Start
Merge Request Code Review
Add to your .gitlab-ci.yml:
include:
- remote: 'https://raw.githubusercontent.com/redhat-community-ai-tools/cicaddy-gitlab/main/gitlab/ai_agent_template.yml'
ai_code_review:
extends: .ai_agent_template
variables:
AI_PROVIDER: "gemini"
GEMINI_API_KEY: $GEMINI_API_KEY
SLACK_WEBHOOK_URL: $SLACK_WEBHOOK_URL
Scheduled Analysis with MCP Tools
include:
- remote: 'https://raw.githubusercontent.com/redhat-community-ai-tools/cicaddy-gitlab/main/gitlab/ai_cron_template.yml'
daily_analysis:
extends: .ai_cron_template
variables:
AI_PROVIDER: "gemini"
GEMINI_API_KEY: $GEMINI_API_KEY
MCP_SERVERS_CONFIG: >-
[{"name": "my-server", "protocol": "http",
"endpoint": "https://my-mcp-server.example.com/mcp",
"timeout": 300, "idle_timeout": 60}]
AI_TASK_PROMPT: |
Use MCP tools to analyze data and generate a comprehensive report.
SLACK_WEBHOOK_URL: $SLACK_WEBHOOK_URL
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
Using DSPy Task Files
Create structured task definitions in YAML:
# .gitlab/prompts/my_analysis.yml
name: custom_analysis
description: Custom analysis task
type: analysis
version: "1.0"
inputs:
- name: data_source
description: Data source to analyze
required: true
outputs:
- name: summary
description: Analysis summary
required: true
format: paragraph
constraints:
- Focus on actionable insights
- Prioritize by business impact
reasoning: chain_of_thought
output_format: markdown
Reference it in your CI job:
custom_analysis:
extends: .ai_cron_template
variables:
AI_TASK_FILE: "../.gitlab/prompts/my_analysis.yml"
CI Template Variables
Common Variables
| Variable | Default | Description |
|---|---|---|
AI_PROVIDER |
gemini |
AI provider (gemini, openai, claude) |
AI_MODEL |
gemini-3-flash-preview |
Model to use |
MCP_SERVERS_CONFIG |
[] |
JSON array of MCP server configs |
AI_TASK_FILE |
(empty) | Path to DSPy task YAML file |
AI_TASK_PROMPT |
(built-in) | Inline task prompt |
SLACK_WEBHOOK_URL |
(empty) | Slack webhook for notifications |
MAX_INFER_ITERS |
15 |
Max AI inference iterations (agent: 15, cron: 30) |
LOG_LEVEL |
INFO |
Logging verbosity |
Agent Template Variables
| Variable | Default | Description |
|---|---|---|
AGENT_TASKS |
code_review |
Comma-separated task list |
GIT_DIFF_CONTEXT_LINES |
10 |
Context lines in diff |
GIT_WORKING_DIRECTORY |
.. |
Git repo directory |
Cron Template Variables
| Variable | Default | Description |
|---|---|---|
TASK_TYPE |
custom |
Prompt template: custom (uses AI_TASK_PROMPT/AI_TASK_FILE), security_audit, quality_report, dependency_check; other values use general analysis |
TASK_SCOPE |
external_tools |
Analysis scope |
MAX_EXECUTION_TIME |
600 |
Max execution time (seconds) |
CONTEXT_SAFETY_FACTOR |
0.75 |
Token budget safety factor |
Architecture
cicaddy (core) - AI agent framework with MCP support
+-- cicaddy-gitlab - GitLab platform plugin (this package)
The plugin registers with cicaddy via Python entry points:
cicaddy.agents- MergeRequestAgent, BranchReviewAgentcicaddy.settings_loader- GitLab-specific settingscicaddy.cli_args- GitLab CLI argumentscicaddy.validators- GitLab configuration validation
Running Locally
You can run the agent outside of GitLab CI for development and testing using .env files.
# Install from source
git clone https://github.com/redhat-community-ai-tools/cicaddy-gitlab.git
cd cicaddy-gitlab
uv pip install -e .
# Prepare environment file
cp .env.example .env.local
# Edit .env.local with your API key and settings
# Validate configuration
uv run cicaddy config show --env-file .env.local
# Run the agent
uv run cicaddy run --env-file .env.local
# Override settings via CLI
uv run cicaddy run --env-file .env.local --ai-provider openai --verbose
For MR review, use .env.mr.example as a starting point — it includes GitLab API variables (GITLAB_TOKEN, CI_MERGE_REQUEST_IID, etc.).
See docs/running-locally.md for detailed examples including MCP server configuration, DSPy task files, and troubleshooting.
Development
# Install with dev dependencies
uv pip install -e ".[dev]"
# Run tests
uv run pytest
# Lint and format
ruff check --fix src/ tests/
ruff format src/ tests/
License
Apache License 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_gitlab-0.1.0.tar.gz.
File metadata
- Download URL: cicaddy_gitlab-0.1.0.tar.gz
- Upload date:
- Size: 27.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fa9684ca789e456ef3375991983901809b030421e9e93a42e2db2580a8b2567
|
|
| MD5 |
c67957da9eeb70d624d3efbf463ea243
|
|
| BLAKE2b-256 |
4226858ad207488719de0f26364b56f200bb8eded0266bfe680f94d4f5c402fa
|
Provenance
The following attestation bundles were made for cicaddy_gitlab-0.1.0.tar.gz:
Publisher:
python-publish.yml on redhat-community-ai-tools/cicaddy-gitlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cicaddy_gitlab-0.1.0.tar.gz -
Subject digest:
1fa9684ca789e456ef3375991983901809b030421e9e93a42e2db2580a8b2567 - Sigstore transparency entry: 1086211606
- Sigstore integration time:
-
Permalink:
redhat-community-ai-tools/cicaddy-gitlab@c9c0db1567677c8b03d964c85558b57cbcf69a4c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/redhat-community-ai-tools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c9c0db1567677c8b03d964c85558b57cbcf69a4c -
Trigger Event:
release
-
Statement type:
File details
Details for the file cicaddy_gitlab-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cicaddy_gitlab-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.0 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 |
74674c4d63e333f8f362c86516a3740e21019c54caa98ea7f223e322f0a1435e
|
|
| MD5 |
4491082fefa4a362a7a4490c0b30f0d5
|
|
| BLAKE2b-256 |
7396466b614600777a0d4c0da2210d388262bfd6722e1119f968340814231b07
|
Provenance
The following attestation bundles were made for cicaddy_gitlab-0.1.0-py3-none-any.whl:
Publisher:
python-publish.yml on redhat-community-ai-tools/cicaddy-gitlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cicaddy_gitlab-0.1.0-py3-none-any.whl -
Subject digest:
74674c4d63e333f8f362c86516a3740e21019c54caa98ea7f223e322f0a1435e - Sigstore transparency entry: 1086211673
- Sigstore integration time:
-
Permalink:
redhat-community-ai-tools/cicaddy-gitlab@c9c0db1567677c8b03d964c85558b57cbcf69a4c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/redhat-community-ai-tools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c9c0db1567677c8b03d964c85558b57cbcf69a4c -
Trigger Event:
release
-
Statement type: