Implement Cline/Gemini-CLI integration with Bun runtime in Kestra workflows
Description
Integrate Cline CLI (with gemini-cli as fallback) using Bun runtime in Kestra workflow orchestration for agent execution.
Requirements
Primary: Cline CLI with Bun
- Install and configure Cline CLI in Kestra worker environment
- Use Bun as the JavaScript runtime (faster than Node.js)
- Configure Cline to use Gemini API for agent operations
- Execute adversary and defender agents via Cline in Kestra tasks
Fallback: gemini-cli with Bun
- If Cline CLI fails or is unavailable, fall back to gemini-cli
- Implement retry logic with graceful degradation
- Use gemini-cli for direct Gemini API interactions
- Maintain same input/output interface for both tools
Kestra Workflow Structure
id: redloop-security-scan
namespace: redloop
tasks:
- id: setup-environment
type: io.kestra.plugin.scripts.bun.Script
containerImage: oven/bun
beforeCommands:
- bun install -g cline-cli gemini-cli
script: |
const { $ } = require('bun');
// Verify installations
try {
await $`cline --version`;
console.log('✓ Cline CLI available');
} catch {
console.log('⚠ Cline unavailable, will use gemini-cli fallback');
}
- id: adversary-scan
type: io.kestra.plugin.scripts.bun.Script
containerImage: oven/bun
env:
GEMINI_API_KEY: "{{ secret('GEMINI_API_KEY') }}"
CLINE_TIMEOUT_SECONDS: "300"
TARGET_REPO: "{{ inputs.repo_path }}"
beforeCommands:
- bun install -g cline-cli gemini-cli
script: |
const { $ } = require('bun');
let analysisResult;
// Try Cline CLI first
try {
console.log('Attempting Cline CLI analysis...');
const result = await $`cline analyze --target ${process.env.TARGET_REPO}`.quiet();
analysisResult = result.stdout.toString();
console.log('✓ Cline analysis completed');
} catch (error) {
// Fallback to gemini-cli
console.log('⚠ Cline failed, using gemini-cli fallback');
try {
const fallback = await $`gemini-cli prompt "Analyze for security vulnerabilities: ${process.env.TARGET_REPO}"`.quiet();
analysisResult = fallback.stdout.toString();
console.log('✓ Gemini-CLI analysis completed');
} catch (fallbackError) {
console.error('✗ Both Cline and gemini-cli failed');
throw fallbackError;
}
}
console.log('Analysis Result:', analysisResult);
await Bun.write('analysis-result.json', JSON.stringify({ result: analysisResult }));
outputFiles:
- analysis-result.json
- id: defender-fix
type: io.kestra.plugin.scripts.bun.Script
containerImage: oven/bun
env:
GEMINI_API_KEY: "{{ secret('GEMINI_API_KEY') }}"
VULNERABILITIES: "{{ outputs['adversary-scan'].outputFiles['analysis-result.json'] }}"
beforeCommands:
- bun install -g cline-cli gemini-cli
script: |
const { $ } = require('bun');
const vulns = await Bun.file(process.env.VULNERABILITIES).json();
// Try Cline CLI for fixes
try {
console.log('Attempting Cline CLI fix generation...');
await $`cline fix --input ${process.env.VULNERABILITIES}`;
console.log('✓ Cline fix generation completed');
} catch (error) {
console.log('⚠ Cline failed, using gemini-cli fallback');
await $`gemini-cli prompt "Generate fixes for: ${JSON.stringify(vulns)}"`;
console.log('✓ Gemini-CLI fix generation completed');
}
Technical Details
Bun Plugin Benefits
- Native Bun Support: Uses dedicated
io.kestra.plugin.scripts.bun.Script plugin
- Official Container:
oven/bun container image with full Bun runtime
- Built-in Bun APIs: Direct access to
Bun.write(), Bun.file(), and $ shell execution
- 3x faster startup than Node.js
- Built-in TypeScript support
- Lower memory footprint
- No Node.js compatibility layer needed
Error Handling & Retry Logic
- Detect Cline CLI failures (exit codes, timeouts)
- Automatic fallback to gemini-cli
- Log which tool was used for each execution
- Metrics tracking (success rates for each tool)
Environment Variables
# Kestra environment variables
GEMINI_API_KEY=${GEMINI_API_KEY}
CLINE_CONFIG_PATH=/etc/kestra/cline.json
FALLBACK_TO_GEMINI_CLI=true
CLINE_TIMEOUT_SECONDS=300
Acceptance Criteria
Dependencies
Links & Resources
Context
Requested by @haroon0x in issue #1
This enables RedLoop agents to run in orchestrated workflows with fast Bun runtime and resilient fallback strategy.
Implement Cline/Gemini-CLI integration with Bun runtime in Kestra workflows
Description
Integrate Cline CLI (with gemini-cli as fallback) using Bun runtime in Kestra workflow orchestration for agent execution.
Requirements
Primary: Cline CLI with Bun
Fallback: gemini-cli with Bun
Kestra Workflow Structure
Technical Details
Bun Plugin Benefits
io.kestra.plugin.scripts.bun.Scriptpluginoven/buncontainer image with full Bun runtimeBun.write(),Bun.file(), and$shell executionError Handling & Retry Logic
Environment Variables
Acceptance Criteria
io.kestra.plugin.scripts.bun.ScriptDependencies
Links & Resources
Context
Requested by @haroon0x in issue #1
This enables RedLoop agents to run in orchestrated workflows with fast Bun runtime and resilient fallback strategy.