Build a Custom Multi-Agent Code Analysis Pipeline with ECOA AI Platform ACP: A Step-by-Step Developer Tutorial
You’ve got a growing codebase. Multiple languages, hundreds of PRs per week, and a CI pipeline that’s already groaning. Static analysis tools catch the obvious stuff, but they miss the nuanced bugs—the ones that only a human reviewer (or a really good AI) would spot.
What if you could build your own code analysis pipeline, one that combines multiple AI agents—each specialized in a different task—and orchestrates them to run automatically on every commit?
The Debugging Playbook for Multi-Agent AI Systems: How to Fix Agent Communication Failures in Production
The Debugging Playbook for Multi-Agent AI Systems: How to Fix Agent Communication Failures in Production You’ve built a… ...
That’s exactly what we’ll do today. Using the ECOA AI Platform ACP (Agent Orchestration Platform), we’ll build a custom multi-agent pipeline that performs linting, security scanning, test generation, and style enforcement—all in one coordinated workflow.
And the best part? This isn’t a toy. Our team in Ho Chi Minh City recently deployed a similar pipeline for a fintech client. It cut their manual review time by 62% and caught three production bugs in the first week. Let’s get into it.
Vietnam Outsourcing: The Strategic Play for Tech Leaders in 2025
TL;DR: Vietnam outsourcing is now the fastest-growing software development destination in Southeast Asia. Lower costs than India, higher… ...
Why a Multi-Agent Pipeline Beats a Monolithic Tool
Single-agent tools like a linter or a Snyk scanner are great at one thing. But real-world code analysis requires multiple perspectives. You need:
- Linting for syntax and conventions
- Security scanning for vulnerable dependencies and hardcoded secrets
- Test coverage analysis to flag untested paths
- Style enforcement for team-specific formatting rules
Running these as separate CI steps is inefficient. You get redundant work, conflicting outputs, and no shared context. A multi-agent pipeline solves that by orchestrating agents that communicate and share results.
Here’s a rhetorical question: Would you rather have four separate tools yelling at you, or one intelligent pipeline that prioritizes issues and suggests fixes? Exactly.
What We’re Building
We’ll create a pipeline with four agents:
| Agent | Role | Tool/Model |
|---|---|---|
| `linter-agent` | ESLint/Flake8 runner | Local or remote linter |
| `security-agent` | Dependency & secret scanner | Bandit + custom rules |
| `test-coverage-agent` | Analyze test gaps | Coverage.py + LLM |
| `style-enforcer` | Enforce code formatting | Prettier/Black + LLM |
The ECOA AI Platform ACP will orchestrate these agents, pass context between them, and produce a unified report.
Prerequisites
- Python 3.11+
- ECOA AI Platform ACP account (free tier works)
- A GitHub repository (any language, but we’ll use Python examples)
- Basic understanding of YAML and JSON
Step 1: Define Your Agents
In ECOA ACP, agents are defined as YAML configurations. Each agent has a `role`, `model`, and `tools`. Here’s our linter agent:
yaml
# agents/linter-agent.yml
name: linter-agent
role: code-linter
model: gpt-4o-mini
tools:
- name: run_eslint
command: "npx eslint {{file_path}} --format json"
output_type: json
- name: run_flake8
command: "flake8 {{file_path}} --format=json"
output_type: json
instructions: |
Analyze the provided file for linting errors.
Summarize the top 3 issues and suggest fixes.
We’ll define similar YAML files for the security, test-coverage, and style-enforcer agents. The key is to give each agent a clear `instructions` field that tells it how to process the output from its tools.
Step 2: Create the Orchestration Workflow
Now we wire the agents together. The ECOA ACP uses a DAG (Directed Acyclic Graph) to define execution order. But here’s the trick: we don’t run agents in strict sequence. Instead, we run them in parallel and then aggregate results.
Create a workflow file:
yaml
# workflows/code-analysis.yml
name: code-analysis-pipeline
version: 1.0
triggers:
- event: push
branches: [main, develop]
- event: pull_request
steps:
- id: lint
agent: linter-agent
inputs:
file_path: "{{ changed_files }}"
run_after: [] # runs immediately
- id: security
agent: security-agent
inputs:
file_path: "{{ changed_files }}"
run_after: []
- id: test-coverage
agent: test-coverage-agent
inputs:
project_root: "{{ repo_root }}"
run_after: []
- id: style
agent: style-enforcer
inputs:
file_path: "{{ changed_files }}"
run_after: []
- id: aggregate
agent: aggregator-agent
inputs:
lint_result: "{{ steps.lint.output }}"
security_result: "{{ steps.security.output }}"
test_result: "{{ steps.test-coverage.output }}"
style_result: "{{ steps.style.output }}"
run_after: [lint, security, test-coverage, style]
instructions: |
Combine all agent outputs into a single JSON report.
Prioritize issues by severity (security > lint > style > test).
Generate a summary for the PR comment.
Notice the `aggregator-agent` runs only after all four analysis agents finish. This is where the orchestration shines—we collect results and produce a unified report.
Step 3: Deploy the Pipeline with the ECOA CLI
ECOA ACP provides a CLI to deploy workflows directly to your CI/CD. Install it:
bash
pip install ecoa-cli
ecoa login --api-key YOUR_API_KEY
Then deploy:
bash
ecoa deploy workflows/code-analysis.yml --project my-project
The CLI will validate the workflow, register the agents, and set up the webhook listener. Once deployed, every push or PR automatically triggers the pipeline.
Step 4: Handle the Results
The aggregator agent outputs a JSON report. We can use that to post a comment on the PR. Here’s a quick Python script (run as a GitHub Action):
python
import json
import os
from github import Github
# Fetch the aggregated report from ECOA
report = json.loads(os.environ['ECOA_RESULT'])
# Post to PR
g = Github(os.environ['GITHUB_TOKEN'])
repo = g.get_repo(os.environ['GITHUB_REPOSITORY'])
pr = repo.get_pull(int(os.environ['PR_NUMBER']))
comment = f"## Code Analysis Results\n\n"
comment += f"**Severity**: {report['priority']}\n"
comment += f"**Issues Found**: {report['total_issues']}\n\n"
for issue in report['issues'][:5]:
comment += f"- {issue['agent']}: {issue['message']}\n"
pr.create_issue_comment(comment)
That’s it. Your multi-agent pipeline is live.
Real-World Impact: A Story from Ho Chi Minh City
We rolled this exact pipeline for a US-based e‑commerce client whose codebase had grown to 200K+ lines across Python and JavaScript. Their old CI took 18 minutes and produced 50+ separate alerts. Developers ignored most of them.
After deploying the ECOA ACP pipeline, we:
- Reduced analysis time to 4 minutes (parallel execution)
- Cut false positives by 73% (agents cross-validated issues)
- Caught a hardcoded AWS secret that Bandit alone had missed
The client’s CTO told us: “It’s like having a senior dev review every commit, but at 1/10th the cost.” That’s the power of orchestration.
Tips for Production
- Start small: Begin with two agents (linter + security) and expand.
- Use local models: For latency-sensitive pipelines, run agents with Ollama or vLLM on your own infra. ECOA ACP supports both.
- Monitor agent health: Set up alerts if an agent fails to run. ECOA ACP logs every step.
- Version your workflows: ECOA ACP supports versioning—roll back if a new agent breaks the pipeline.
Frequently Asked Questions
Q: Can I use this pipeline with languages other than Python?
Absolutely. ECOA ACP agents can run any CLI tool. Just change the `command` field to use ESLint, RuboCop, or whatever linter your language needs.
Q: How does ECOA ACP handle rate limits for LLM calls?
The platform includes built-in retry logic and rate limiting. You can configure max requests per minute per agent in the YAML.
Q: Do I need to host my own agents?
Not necessarily. ECOA ACP provides managed agents (with GPT-4o, Claude 3.5, etc.) out of the box. Or you can bring your own models via Docker.
Q: What if an agent fails mid-pipeline?
ECOA ACP supports conditional branching. You can mark an agent as `optional` so the pipeline continues with partial results. The aggregator agent can handle missing inputs gracefully.
Related reading: Hire Vietnamese Developers in 2025: Why Vietnam Is Your Best Offshore Bet
Related reading: Vietnam Outsourcing: Why Asia’s Rising Tech Hub is Crushing It in 2025